OpenEdv-开源电子网

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

帮看一下这个读USART-SR,DR寄存器的作用是什么

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2019-1-12
在线时间
34 小时
发表于 2019-3-10 10:21:33 | 显示全部楼层 |阅读模式
2金钱
这是一个用DMA并使用USART空闲中断接收数据的中断函数,但不了解里面的i是做什么用的。
另外一点,我进了空闲中断,中断函数里设置了一个标志位,我是不是需要不停的检测到这个标志位?然后把dmabuf里的数据读出来?

void USART1_IRQHandler(void)

{
    u16 i;
    if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//如果为空闲总线中断
    {
        i = USART1->SR; //读SR的作用是?
        i = USART1->DR; //读DR的作用是?

        USART_ClearITPendingBit(USART1, USART_IT_IDLE); //清掉空闲中断
        DMA_Cmd(DMA2_Stream5, DISABLE);//关闭DMA,防止处理其间有数据
        Data_Len=65535-DMA_GetCurrDataCounter(DMA2_Stream5);
        data_recv_flag_set(); //标志位
        printf("Data_Len=%d\n\r",Data_Len);
        //DMA_Cmd(DMA2_Stream5, ENABLE);//开启DMA
    }
}  

最佳答案

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

作用是清除IDLE标志位, 根据规格要求, 清除IDLE是要先读取SR后读DR, 因为中断是IDLE, 所以从DR读出来的是没意思的数据, 其实不用i的, 写了i还会因为优化等级而被优化掉, 把i=都删了就可以
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4069
金钱
4069
注册时间
2018-8-14
在线时间
688 小时
发表于 2019-3-10 10:21:34 | 显示全部楼层
作用是清除IDLE标志位, 根据规格要求, 清除IDLE是要先读取SR后读DR, 因为中断是IDLE, 所以从DR读出来的是没意思的数据,
其实不用i的, 写了i还会因为优化等级而被优化掉, 把i=都删了就可以
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2019-1-12
在线时间
34 小时
 楼主| 发表于 2019-3-10 10:38:27 | 显示全部楼层
edmund1234 发表于 2019-3-10 10:33
作用是清除IDLE标志位, 根据规格要求, 清除IDLE是要先读取SR后读DR, 因为中断是IDLE, 所以从DR读出来的 ...

非常感谢,刚学STM2个月,对好多东西还不懂。一时查资料也不知道从何查起,早上大致看了一下SR和DR寄存器,也没找到。

意思是不要这几个语句也行?USART_ClearITPendingBit(USART1, USART_IT_IDLE); 这条就可以清掉IDLE标志位?
回复

使用道具 举报

3

主题

1903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4069
金钱
4069
注册时间
2018-8-14
在线时间
688 小时
发表于 2019-3-10 11:30:49 | 显示全部楼层
STM32Fxxx Reference manual是开发stm32必看的文档, 不明白为什么这么多人不知道这份文档
USART_ClearITPendingBit清除的是另一标志位, 与IDLE位无关
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-3-28 21:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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