本人学习单片机其实已经很长时间了 51 32 都学过 问出这个问题其实自己都有点脸红 但还是希望各位前辈们不吝赐教:
我学单片机有两个东西 就是无论怎么学 都学不明白 那就是串口和通讯 因为感觉这个东西特别抽象 一直不能理解 只要和串口通讯沾边的东西就蒙 一般都是用人家写好的函数 要是让我自己写 我连一点思路都没有
先说串口 说个最简单的问题 一个能直接 用串口读出数据的模块或传感器(都不需要把数据处理 直接读出来就能用的那种)把数据用串口读出来 再通过串口发给电脑 通过串口调试助手查看数据 我自己写 写不出来 就是搞不懂这个数据是如何发送接收的 感觉特别抽象 不像那种LED灯 PWM 能直观的看出来 他这数据是怎么发的 什么时候发 一次发多少 你是以什么样的形式接收他的 接收到以后存哪了 还有在一些数据手册会写什么
起始符1 0x42 (固定)
起始符1 0x4d (固定)
帧长度高八位 ....... 帧长度=2*13+2(数据+校验位)
帧长度低八位 .......
数据1高八位 .......
数据1低八位 .......
............................................
数据13抵八位 .......
数据和校验高八位 ........ 校验位=起始符1+起始符2+.......+数据13抵八位
数据和校验抵八位 ........
就像这个数据手册写的 我在串口中断函数怎么才能把我想要的数据读出来 读出来我放哪 又怎么通过串口发给电脑用串口调试助手查看 想不明白 说白了还是不理解串口这个东西 就像写程序的时候 经常会看见判断标志位
while(.......)//判断接收是否完成 while(.........)//判断数据发送是否完成
{ {
...................... ........................
} }
当然这两个 还是明白的一个在接收数据 一个在发送数据 但他这个数据怎么发的怎么接收的 一次发多少 一次接收多少 那些个校验位他是怎么处理的 还是想不明白
以上是第一个问题(快把自己写晕了)
再说第二个问题 就是一些通信IIC SPI 458 CAN
其实485和CAN应该算第一个问题串口的问题
就说IIC和SPII吧 反正就是和通讯有关的
首先说这个东西在我的大脑里和串口一样 也是感觉很抽象 不能理解 因为现在很多的传感器和模块都是这两种接口的 虽说一般的传感器买来商家都会给历程 直接用人家写好的历程就行 即便不能直接用 把相应的函数移植到自己开发板还是没问题的 但如果没有历程 就给我个数据手册 让我自己通过数据手册上的时序图 和往寄存器的读写操作 把数据读出来 一下就蒙比了 完全搞不懂 怎么往寄存器写 又怎么从寄存器里读 写什么读什么 还有那些时序图 什么起始信号 停止信号 应答非应答 都是什么意思 一点不理解 反正只有一用到串口或通讯的东西 就迷糊 就是理解不了
而且我也发现周围的同学 包括我在内 都有一个毛病 拿到一个新的传感器或模块 第一反应都不是去网上查查资料或看看数据手册想办法把程序写出来 第一反应都是 “来 咱们先去网上找个历程” 然后就是百度历程各大论坛各种搜 要是能找到还行 把人家的历程移植到自己的程序中 要是找不到 自己想办法写 我只能“呵呵”一笑 以前程序咋写出来的 “自己心里没点B数吗”
之前也有人和我说过“那些无线通信啊 WIFI啊 蓝牙啊 网口啊 看起来好像很高大上的样子 那是人家芯片模块做的NB 跟你一毛钱关系都没有 你不就用串口读了个数据吗 还是那些传感器 看似挺好玩的 能测出角度 震动 温湿度 那也是人家传感器做的好 跟你也没一毛钱关系 你只不过是按照人家规定的通讯协议 把数据读出来了而已” 但是恰好串口和通讯我都学明白 所以我感觉把这些东西搞明白是非常非常有必要的 希望前辈们能给指条明路 让自己能把这些东西完全整明白理解了 下次就能自己把程序能写出来
1.
串口通讯其实和PWM也是类似的,就是高低电平的输出,用示波器抓波形就能感觉出来,这里有篇文章不错,可以参看下http://www.51hei.com/bbs/dpj-39824-1.html。当然实际使用中厂商已经把他做了,你只要往寄存器放字节就可以,读取就是取字节,所有的数据都是一个字节一个字节发送/读取的,厂商给的就是字节解析的,这个多参考别人的吧,也不知道该怎么说,DMA超时中断时比较好用的方式,上来就是一整包数据,直接校验比较就好。2.
首先你要明白一点,能在总线上面传输的只有高低电平,不存在什么数据,那些数据都是要经过处理才能呈现的
至于传感器,你要看手册,一般它会要求传输前有多少个时长的高字节或者低字节的
至于找程序这个,说实话,我也是这样干的,你不可能从0开始写,关键是你要理解人家程序里面的那个流程是怎样的
这都是通信总线接口,I2C是有一套传输数据的流程机制;串口、485是有硬件接口定义和硬件协议的;但是你传输什么数据,怎么发是自己定义。
你的传感器是测 pm2.5的吧。
直接在串口中断里 判断起始符,接收到起始符就把数据存入数组。 接收完成后再做处理就行了。
485 可以理解成是串口。我目前接触的都是用一颗串口转485的芯片。就是信号方式不同。另外485是半双工的。