OpenEdv-开源电子网

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

问一个比较基础的串口接收方面硬件的知识

[复制链接]

58

主题

96

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-7-27
在线时间
21 小时
发表于 2015-12-3 16:02:31 | 显示全部楼层 |阅读模式
5金钱
小弟从软件出身,很多硬件知识还在补,数电模电基本不动,毕业后才开始学
,不过现在需要了解一个事情,希望大家可以慷慨解囊,小弟在此感谢。

有一个串口中断程序如下:
void USART1_IRQHandler(void)
{
  if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  {

    RxChar = USART_ReceiveData(USART1);
}
}

看硬件图有一个移位器,满了8个就接收过来,如果我这样改一下
void USART1_IRQHandler(void)
{
 while()//这里的判断是某个判断标志,比如10ms,5ms或者一段时间才可以过去,那么是不是会因为串口移位器的波形走过而丢包
 {}
  if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  {

    RxChar = USART_ReceiveData(USART1);
}
}


表达的不太好,如果各位觉得我哪里表达不太好,请批评一下,我一定改正。

我现在有一个串口接收的程序,接收到六七百个的时候串口就死了,不知道死在哪儿。

最佳答案

查看完整内容[请看2#楼]

不要在中断里面等,设置标志位在中断外执行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-3 16:02:32 | 显示全部楼层
不要在中断里面等,设置标志位在中断外执行
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2015-12-3 16:02:32 | 显示全部楼层
中断程序的执行时间应该要尽可能断,不能阻塞
如果这次的中断还没处理完,下一次中断又来了,这样阻塞,肯定是有问题的。
回复

使用道具 举报

1

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2014-4-14
在线时间
104 小时
发表于 2015-12-3 16:02:32 | 显示全部楼层
最好不要在中断内部做这些处理,中断内部代码应该尽可能少、短小,中断是告诉你有这么个事,这个事怎么处理,应该尽量在中断外面。
回复

使用道具 举报

11

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2015-4-5
在线时间
35 小时
发表于 2015-12-3 16:26:32 | 显示全部楼层
应该会丢包。为什么要等?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 01:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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