完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 前言
在单片机通信项目中,经常会使用串口发送数据 这节说一下普通发送和中断发送的区别. 2. 思考一下下面的程序 STM32非中断发送 51单片机非中断发送 我现在要发送 100个数据 3. 上面程序的问题 每次调用发送数据函数,就会停在那里,发送完成以后才会往下执行! 假设波特率是9600 那么就是 1/9600 S 也就是 0.1ms发送一位数据,发送一字节数据需要大约 0.9ms (8位数据,1个停止位) 如果发送100个数据,那么延时大约 90ms 如果有好几个地方都使用了上面的方式发送数据,程序的执行效率会大大降低! 4. 咱来解决上面的问题 1.STM32发送数据的时候咱用中断发送 5.测试 上面的程序只是使用中断发送数据. 我补充一下: 调用 UsartOutStrIT 函数只是把数据地址和数据长度进行了赋值 然后打开了发送中断 当前的程序并没有阻塞在那里,而是接着往下运行 只不过会一边执行发送中断一边在主循环运行. 6.提醒 1.在使用中断发送以后,需要小心一个地方! 假设是下面这样: 中断发送100字节; 非中断发送数据; 大家知道执行中断发送以后,发送数据交给了中断,程序继续往下执行 然后会接着执行 非中断发送数据; 现在就出问题了,中断发送着数据呢,然后调用了非中断发送 就会造成死机! 要么全部使用中断发送数据,要么等中断发送完,再调用非中断发送数据 2. 中断发送100字节; 中断发送100字节; 如果执行上面的程序也是有问题的! 第一个没有发送完,第二个便会覆盖第一个! 7.结语 这节只是抛砖引玉,更加完善的方案请用户接着阅读后面的章节. 给用户提供了51单片机和STM32中断发送数据的例子。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3456 浏览 1 评论
8988 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:48 , Processed in 1.253479 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号