OpenEdv-开源电子网

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

STM32输入捕获问题

[复制链接]

13

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
315
金钱
315
注册时间
2017-12-25
在线时间
87 小时
发表于 2017-12-25 16:11:15 | 显示全部楼层 |阅读模式
10金钱
波形.png

这是要捕捉的波形图  
图中圈出来的是数据起始帧,大概370~390us,后面的数据都是小于这个电平宽。

现在的情况是:用STM32F103RBT6   72MHZ主频  1MHZ捕捉  
数据是这样的:391 280 145 390 265 166 150 149 145 165 149 145 165 150 280 281 149 145 279 165 145 266 166 150 148 145 166 149 145 166 151 281 280  149 145 280 167 144 280 148 267 266 148 166 248 143 166
167
144
166
166
391
281
146
390
266
167
150
148
可以看到有两个390连在一起,捕捉是对的  

但是用  STM32L152RCT6   16MHZ主频   1MHZ捕捉  数据是这样的 272 261 385 141 141 260 158 272 137 158 158 271 137 272 272 260 385 140 140 260 157 272 138 158  157 272 138 272 271 261 384
141
137
260
157
272
138
158
157
272
139
271
272
261
384
141
140
259
152
271
137
158
157
272
138
272
272
261
386
141
141
260
157
272
139
158
156
272
137
271
272

两个380之间隔了很多数据  数据就不对了


void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//捕捉中断  这是STM32L152RC的捕捉部分代码 TIM2CH1_CAPTURE_VAL:高电平时间 LOW_temp:低电平时间
{
       
   if(TIM2==htim->Instance)
         {

          if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获       
                {          
                                if(TIM2CH1_CAPTURE_STA&0X40)                //捕获到一个下降沿                
                                {         
                                         TIM2CH1_CAPTURE_STA |= 0X80;                //标记成功捕获到一次高电平
                                        // TIM2CH1_CAPTURE_VAL=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1);
                                                TIM2CH1_CAPTURE_VAL=TIM2->CCR1;       
                                                printf("%d\r\n",TIM2CH1_CAPTURE_VAL);
                                          TIM2->CNT =0;
                                          TIM2->CCR1=0;
                                         //__HAL_TIM_SET_COUNTER(&htim2,0);
                                         //__HAL_TIM_GET_COMPARE(&htim2,0);//CNT和CCR寄存器都需要清0
                                         __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING); //CC1P=0 设置为上升沿捕获
                                }
                                               
                                else  //还未开始,第一次捕获上升沿
                                {
                                                        TIM2CH1_CAPTURE_STA=0;                        //清空
                                                        LOW_temp=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1);
                                       
                                                        //        printf("low:%d\r\n",LOW_temp);
                                                        TIM2CH1_CAPTURE_VAL=0;
                                                        TIM2CH1_CAPTURE_STA|=0X20;                //标记捕获到了上升沿
                                                        TIM2CH1_CAPTURE_STA|=0X40;                //标记捕获到了上升沿 (调整找高电平用)
                                            TIM2->CNT =0;
                                            TIM2->CCR1=0;
                                                //        __HAL_TIM_SET_COUNTER(&htim2,0);//清空计数值
                                                //        __HAL_TIM_GET_COMPARE(&htim2,0);//CNT和CCR寄存器都需要清0
                                                        __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_FALLING);        //CC1P=1 设置为下降沿捕获
                          }       
                               
                        }                                                                                   
       
                }
             
}



最佳答案

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

主频低,表示执行代码的速度就低,表示中断处理的时间需要的就长,多方面综合考虑吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-12-25 16:11:16 | 显示全部楼层
Alle 发表于 2017-12-26 09:36
波特滤115200  已经很高了  就是这么个波形  我用103系列 72MHZ主频单片机都没问题  
就是用16MHZ主频单 ...

主频低,表示执行代码的速度就低,表示中断处理的时间需要的就长,多方面综合考虑吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-12-26 00:50:43 | 显示全部楼层
printf波特率改高一点试试
回复

使用道具 举报

13

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
315
金钱
315
注册时间
2017-12-25
在线时间
87 小时
 楼主| 发表于 2017-12-26 09:36:06 | 显示全部楼层
正点原子 发表于 2017-12-26 00:50
printf波特率改高一点试试

波特滤115200  已经很高了  就是这么个波形  我用103系列 72MHZ主频单片机都没问题  
就是用16MHZ主频单片机不行  但是定时器都是1MHZ捕捉的。。。
除此之外,还有一个问题 就是我用这个单片机最高只能捕捉8KHZ以下的频率,高了就捕捉不到
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 16:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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