OpenEdv-开源电子网

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

我往串口数据寄存器USART1->DR寄存器中写数据,但是调试时查看该寄存器的值却一直是0,这是为啥啊?求大神指点

[复制链接]

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-3-16
在线时间
3 小时
发表于 2015-7-3 10:15:36 | 显示全部楼层 |阅读模式
5金钱
我的程序是定时发送数据,程序是这样的:
u16 temp;
u8 TX_temp[3];
u8 t;
void TIM3_IRQHandler(void)
{          
    if(TIM3->SR&0X0001)
    {
        temp=DS18B20_Get_Temp();
        TX_temp[0]=(u8)temp;
        temp=temp>>8;
        TX_temp[1]=(u8)temp;
        for(t=0;t<2;t++)
        {
            USART1->DR=TX_temp[t];
            while((USART1->SR&0X40)==0);
        }
    }   
    TIM3->SR&=~(1<<0);
}
我查看变量temp和TX_temp的值都是对的,但是USART1->DR寄存器的值却一直都是0?
我也不知道为啥,求指点

最佳答案

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

USART1->DR 读走了就变零了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2015-7-3 10:15:37 | 显示全部楼层
USART1->DR
读走了就变零了
回复

使用道具 举报

6

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2013-12-14
在线时间
4 小时
发表于 2015-7-3 13:08:10 | 显示全部楼层
串口时钟开了吗?你看下你的电脑的串口是否有接收到数据啊?
回复

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-3-16
在线时间
3 小时
 楼主| 发表于 2015-7-3 13:29:26 | 显示全部楼层
回复【3楼】止天:
---------------------------------
懂了 谢谢哈
回复

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-3-16
在线时间
3 小时
 楼主| 发表于 2015-7-3 13:29:44 | 显示全部楼层
回复【2楼】664653162:
---------------------------------
是2楼说的那个原因
回复

使用道具 举报

13

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2013-7-9
在线时间
6 小时
发表于 2015-12-31 11:59:50 | 显示全部楼层
我也遇到这个问题,并且程序一直停在发送等待的循环中,串口时钟是开启的
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
发表于 2016-3-21 12:27:15 | 显示全部楼层
止天 发表于 2015-7-3 10:15
USART1-&gt;DR
读走了就变零了

读走了是什么意思?存到别的寄存器里了吗?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-21 12:28:57 | 显示全部楼层
昊430 发表于 2016-3-21 12:27
读走了是什么意思?存到别的寄存器里了吗?

那个DR,在硬件上是两个寄存器的合体,一个只读,一个只写
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
发表于 2016-3-21 12:35:30 | 显示全部楼层
xkwy 发表于 2016-3-21 12:28
那个DR,在硬件上是两个寄存器的合体,一个只读,一个只写

我也遇到这个问题,向里面写数据,DR一直是零,那在线调试时候显示的DR是哪个DR?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-21 15:41:41 | 显示全部楼层
昊430 发表于 2016-3-21 12:35
我也遇到这个问题,向里面写数据,DR一直是零,那在线调试时候显示的DR是哪个DR?

调试时显示的是调试器读取出来的值,你说是哪个呢?
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-9-28 12:09:30 | 显示全部楼层
             //Uart5转发给TI3220
                for(t=0;t<len;t++)                //循环发送数据
                {
                        USART_SendData(UART5,rs485buf[t]); //发送数据
                        while(USART_GetFlagStatus(UART5,USART_FLAG_TC)==RESET); //等待发送结束       
                       temp= 0xff&(UART5->DR);                       
                        ST75256_DispChar_EN(128+t*8,4,temp);
                }               
                LED_Warning=!LED_Warning;
                vTaskDelay(200);               



以上代码在串口发送后想读下DR的值并在LCD上显示,发现无法显示,监控DR一直是0,但是数据确实是发送出去了,程序功能没有问题,就是试图读DR不行,不知道为什么?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 05:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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