OpenEdv-开源电子网

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

红外数据接收,配置完成后TIM3->SR寄存器读出异常

[复制链接]

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-8-31 17:00:12 | 显示全部楼层 |阅读模式
5金钱
1.主芯片:STM32F103C8T6
2.使用PB1(TIM3_CH4)进行红外数据采集,配置如下(仿照原子哥TIM4_CH4配置
[mw_shl_code=c,true]/******************************************************************** * 功能 :初始化 ******************************************************************************/ void IRRX_Init(void) { RCC->APB1ENR |= 1 << 1; //TIM3时钟使能 RCC->APB2ENR |= 1 << 3; //PORTB时钟使能 GPIOB->CRL &= 0XFFFFFF0F; //PB1上拉输入 GPIOB->CRL |= 0X00000080; GPIOB->ODR |= 1 << 1; TIM3->ARR = 10000; //自动重装值,溢出时间72M/(PSC+1)*ARR=100MS TIM3->SC = 719; //预分频,100K计数频率,10us加1 TIM3->CCMR2 |= 1 << 8; //CC4S=01, 选择输入端IC映射到TI上 TIM3->CCMR2 |= 3 << 12; //IC4F=0011,配置输入滤波器,8个定时器时钟周期吕布 TIM3->CCMR2 |= 0 << 10; //IC4PS=00,配置输入分频,不分频 TIM3->CCER |= 0 << 13; //CC4P=0 上升沿捕获 TIM3->CCER |= 1 << 12; //CC4E=1 允许捕获计数器的值到捕获寄存器中 TIM3->DIER |= 1 << 4; //允许CC4IE捕获中断 TIM3->DIER |= 1 << 0; //允许更新中断 TIM3->CR1 |= 0X01; //使能定时器 MY_NVIC_Init(1, 1, TIM3_IRQn, 2); //分组 }[/mw_shl_code]
3.测试过程中,在TIM3中断中加入发送函数测TIM3_SR寄存器,测试代码如下
[mw_shl_code=c,true]void TIM3_IRQHandler(void) { u16 tsr; tsr = TIM3->SR; if(tsr & 0x01) //overflow,由于每次从新开始计时,接收信号过程不应有溢出 { IRSta = 0; //有溢出则清零,重新开始接收 } if(tsr == 0) { USART1->DR = tsr + 1; //just for test } else { USART1->DR = tsr; //just for test } while((USART1->SR&0x40) == 0); //... }[/mw_shl_code]

通过串口调试助手,会交替接收到01 0f 01 0f 01 0f,也就是TIM3_SR的值有时候是0,有时后是0x0f,这完全不符合预期的结果摸不着头脑,求指导????????
(其他文件没有使用到TIM3,所要接收的红外不论是否发射对串口接收到的数据没有影响)


另,附上TIM3_SR寄存器截图







最佳答案

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

影像中SR这个寄存器就没正常过,都是判断我要的位来做处理,不需要用到的位,可能会莫名其妙的会有状态变化。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-31 17:00:13 | 显示全部楼层
影像中SR这个寄存器就没正常过,都是判断我要的位来做处理,不需要用到的位,可能会莫名其妙的会有状态变化。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-9-1 10:54:50 | 显示全部楼层
仍然未正常接收到数据,继续求指教,最新进展如下:

进入中断后,通过tsr读取TIM3->SR寄存器,并将它赋值给一个全局变量TBL,在主函数中通过串口打印TBL,串口调试助手始终显示TBL为0,也就是说TIM3的状态寄存器读出来的数是0,这个很不合常理,求分析原因~~~~~
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-9-1 10:57:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
测试情况是,进入中断后直接读出的寄存器值为0,这个就摸不着头脑了
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-9-1 14:56:15 | 显示全部楼层
再自顶一下,最新测试情况如下:

使用原子哥战舰红外实验的例程,将PB9短接到模块DATA,依然在主函数打印TIM4_SR,打印出来都是0,但在中断中的自加量打印出来却一直在变化,很奇怪,进入了中断,但标志位始终是0,继续等高手分析~

(使用模块为J05E无线模块,与实验板无线应该只是规约不同而已)
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-1 21:29:23 | 显示全部楼层
回复【4楼】龙之谷:
---------------------------------
慢慢研究下,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2015-9-2 16:09:32 | 显示全部楼层
问题已解决

1.如原子老大所说,SR这个寄存器不需要用到的位,可能会莫名其妙的会有状态变化,测试时应该读出0X01的时候经常读出0X0F,当然只判断0X01位是可以不受影响的

2.接收时一直没有检测到红外数据,结果通过示波器观察到红外端口始终处于高电平,工程师分析是上拉引起,将上拉语句注释掉,再次测试端口始终处于低电平,改用浮空输入后示波器脉冲显示正常。工程师建议以后输入采用浮空输入,上拉下拉容易导致输入阻抗减小,从而影响接收

3.最后感谢原子老大的指导
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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