OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7759|回复: 2

刚开始学嵌入,有些简单的问题弄不明白,望大家别见笑,多多帮助下我这个菜鸟

[复制链接]

29

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2013-8-4
在线时间
0 小时
发表于 2013-8-11 14:06:01 | 显示全部楼层 |阅读模式

问题1:中断函数写成
{
   u8 res;
   if(USART1->SR&(1<<5))
   {
        res=USART1->DR;
        USART1->DR=res;
        delay_ms(100);
    }
}
主函数写成while(1)
那么当我在串口调试助手里输入“ALIENTEK”时,为什么只能发送出“AL”,不是应该每隔100ms输出一个字母吗??还有就是当我把delay_ms(100)去掉时却可以完整的发送“ALIENTEK”??

问题2:串口通信流程是什么呢?按照问题1的程序来说,比如说我输入“ALIENTEK”,那么系统是先发送一个字母"A"给串口,然后串口发生中断,发送出“A”,之后返回主函数,接着再发送“L”给串口,再中断,这个循环往复的过程呢,还是系统直接发出“ALIENTEK”,然后一直持续中断,直到将“ALIENTEK”发送完毕在返回主函数呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-11 14:53:25 | 显示全部楼层
1,你接受中断,第一个数据可以立马接收到,A,然后延时100ms的时候,你的串口助手会把LIENTEK都发完了,所以你只能有1个存在DR里面,那就是L。所以你得到的输出就只有AL两个字符了,剩下的都因为你这句delay100ms给耽误接收,从而丢失掉了...
2,一次性发送的,比如串口助手发送ALIENTEK,那么发送完A以后立马开始发送L,发送L以后立马发送E,直到发完所有的数据。那么假设波特率是9600,每发送1个字符的时间大概为1ms,那么发送ALIENTEK总共只需要8ms左右,就可以全部发送完。所以接收方,必须足够快的去处理发送过来的数据,你在那里优哉游哉的等待100ms,那黄花菜都凉了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

29

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2013-8-4
在线时间
0 小时
 楼主| 发表于 2013-8-11 15:10:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
THANK U 原子同学...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 06:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表