stm32串口收发小结

好久没有熟悉嵌入式的底层是如何实现的,移植过来能用便也不再细究。

前些天移植了个有问题的串口发送,单个字节的发送没有问题,当连续发送很多字节时,发送出来的数据不是想要发出来的,出现了一大串重复数据,后经别人帮忙排查,原来之前一直的发送数据只是向发送寄存器写值,没有进行是否发送完成的判断,就是少了下面的这句

while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);	

发送的形式大概有两种,其实现过程是一致的。一种是先给发送缓冲池写入数据,然后开启中断,从而在中断处理函数中把发送缓冲池中的数据发送出去,另一种是自己写发送函数,根据发送标志位USART_GetFlagStatus进行判断是否发送完,完后直接向发送寄存器中写值,没有在中断函数中进行发送处理。两者都需要对发送标志位进行判断,否则会出现数据没有发送完成,寄存器又被重新赋值的情况。

而对于串口接收,在接收中断中接收到数据后需要关闭中断,否则会一直停留在中断中。

串口接收和串口发送都可以开启DMA中断,这样少占用CPU时间,一般的串口中断是一个字节一个字节的接收,可改为串口空闲中断,这样就可以一帧数据过来才中断一次。后续用到DMA在进行补充~

详细资料可进一步查看此网址:https://blog.csdn.net/qq_35281599/article/details/80299770

术业有专攻,用到哪里补哪里吧~

好好搞算法需要一个扎实的嵌入式基础啊~

更多无人机知识分享,请关注微信公众号:欣飞鸽
开心飞翔,灵动如鸽。愿与无人机爱好者,共创一片蓝天梦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值