STM32无库串口通信实践
不用库函数直接搞定 STM32 串口通信,真的挺锻炼人。你要是遇到平台兼容问题,比如搞移植到 Windows CE,HAL 库用不了,那还得靠咱亲自上手操作寄存器。CR1、BRR、DR这些寄存器得摸熟了,干活才顺。发送接收的过程其实也不复杂,就是写写寄存器、盯着标志位,响应也快,代码也简单。
STM32 的 USART 模块还是挺灵活的,只要你肯多翻翻参考手册。你想要什么样的波特率、数据位、停止位都能自己配。波特率设置用到BRR
,记住公式:BaudRate = Fck / (16 * (BRD + 1))
,Fck 就是你主频。波特率不对,通信就出问题。
要自己控制收发,还得看CR1
和SR
寄存器的几个关键位。想要中断?把RXNEIE
和TXEIE
打开就行。你要是做实时项目,不用中断还真扛不住。不过轮询也不是不行,小项目挺够用的。
收发逻辑其实就是看TXE
和RXNE
这两个标志。发的时候往DR
里写字节,等TXE
变 1 发完了。收的时候等RXNE
变 1 再读DR
,还能顺便清标志。清楚干净,不会乱。
咯,错误别忽略了。帧错、校验错这些都会影响通信质量。SR
寄存器里有对应标志,出了问题及时清掉,不然卡住半天你都不知道咋回事。
多线程环境下搞串口,线程安全问题也得注意。像 Windows CE、RTOS 这类系统,多线程访问串口常见。加个互斥锁,或者用消息队列来收发,比较稳。
,这种不靠库函数的写法自由度高,适合需要深度定制的项目。如果你已经对 STM32 寄存器比较熟,那就挺适合上手试试。如果你还不熟,先从 HAL/LL 库练起也没毛病。
hex.zip
预估大小:33个文件
hex
文件夹
Debug
文件夹
hex.ilk
664KB
hex.exe
116KB
hex.pdb
3.34MB
hex
文件夹
Debug
文件夹
hex.exe.intermediate.manifest
629B
vc80.pdb
380KB
hex.obj
174KB
7.51MB
文件大小:
评论区