OpenEdv-开源电子网

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

关于F407板子输入捕获的问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-10-18
在线时间
0 小时
发表于 2016-10-18 17:25:05 | 显示全部楼层 |阅读模式
5金钱
各位大大,小弟现在用F407板子做输入捕获,需要两路输入捕获低电平。
根据datasheet,选用了TIM5_CH1(PA0)和TIM3_CH2(PA7)作为输入。
配置代码如下:
TIM5_CH1:
//定时器5通道1输入捕获配置(计数器) PA0
//arr:自动重装值(TIM2,TIM5是32位的!!)
//psc:时钟预分频数
void TIM5_CH1_Cap_Init(u32 arr,u32 psc)
{
        RCC->APB1ENR|=1<<3;   //使能TIM5
        RCC->AHB1ENR|=1<<0;   //使能GPIOA
       
        GPIOA->MODER&=~(3<<0);
        GPIOA->MODER|=2<<0;   //设置PA0 复用模式
       
        GPIOA->OSPEEDR&=~(3<<0);
        GPIOA->OSPEEDR|=3<<0; //速度100M
       
        GPIOA->OTYPER&=~(1<<0);
        GPIOA->OTYPER|=0<<0;  // 推挽输出
       
        GPIOA->UPDR&=~(3<<0);
        GPIOA->UPDR|=1<<0;   // 上拉
       
        GPIOA->AFR[0]&=~(15<<0);
        GPIOA->AFR[0]|=2<<0;  //AFR[0]对应端口0~7,AFR[1]对应端口8-15; 首先复位端口,随后选择AF0~15,
                                                                                                //AF0~15设置情况(这里仅是列出常用的,详细的请见407datasheet,56页Table 7):
                                                                                                //AF0:MCO/SWD/SWCLK/RTC   AF1:TIM1/TIM2;            AF2:TIM3~5;               AF3:TIM8~11
                                                                                                //AF4:I2C1~I2C3;          AF5:SPI1/SPI2;            AF6:SPI3;                 AF7:USART1~3;
                                                                                                //AF8:USART4~6;           AF9;CAN1/CAN2/TIM12~14    AF10:USB_OTG/USB_HS       AF11:ETH
                                                                                                //AF12:FSMC/SDIO/OTG/HS   AF13CIM                 AF14:                     AF15:EVENTOUT
       
        TIM5->ARR=arr;                    //设定计数器自动重装值   
        TIM5->SC=psc;                    //预分频器
       
        TIM5->CCMR1|=1<<0;                //CC1S=01         选择输入端 IC1映射到TI1上
        TIM5->CCMR1|=3<<4;                 //IC1F=0011 配置输入滤波器
        TIM5->CCMR1|=0<<2;         //IC1PS=00         配置输入分频,不分频

        TIM5->CCER|=1<<1;                 //CC1P=1        下降沿捕获
        TIM5->CCER|=1<<0;                 //CC1E=1         允许捕获计数器的值到捕获寄存器中

        TIM5->SMCR|=5<<4;     //触发选择:滤波后的定时器输入1(TI1FP1)
        TIM5->SMCR|=7<<0;     //外部时钟模式1
       
        TIM5->CR1|=1<<0;      //使能定时器5
       
}


TIM3_CH2:
//定时器3通道2输入捕获配置(计数器) PA7
//arr:自动重装值(TIM3是16位的!!)
//psc:时钟预分频数
void TIM3_CH2_Cap_Init(u16 arr,u16 psc)
{
        RCC->APB1ENR|=1<<1;   //使能TIM3
        RCC->AHB1ENR|=1<<0;   //使能GPIOA
       
        GPIOA->MODER&=~(3<<14);
        GPIOA->MODER|=2<<14;   //设置PA7 复用模式
       
        GPIOA->OSPEEDR&=~(3<<14);
        GPIOA->OSPEEDR|=3<<14; //速度100M
       
        GPIOA->OTYPER&=~(1<<7);
        GPIOA->OTYPER|=0<<7;  // 推挽输出
       
        GPIOA->UPDR&=~(3<<14);
        GPIOA->UPDR|=1<<14;   // 上拉
       
        GPIOA->AFR[0]&=~((u32)15<<28);   //强制类型转换,否则可能越界 161007  ?
        GPIOA->AFR[0]|=2<<28;  //AFR[0]对应端口0~7,AFR[1]对应端口8-15; 首先复位端口,随后选择AF0~15,
                                                                                                //AF0~15设置情况(这里仅是列出常用的,详细的请见407datasheet,56页Table 7):
                                                                                                //AF0:MCO/SWD/SWCLK/RTC   AF1:TIM1/TIM2;            AF2:TIM3~5;               AF3:TIM8~11
                                                                                                //AF4:I2C1~I2C3;          AF5:SPI1/SPI2;            AF6:SPI3;                 AF7:USART1~3;
                                                                                                //AF8:USART4~6;           AF9;CAN1/CAN2/TIM12~14    AF10:USB_OTG/USB_HS       AF11:ETH
                                                                                                //AF12:FSMC/SDIO/OTG/HS   AF13CIM                 AF14:                     AF15:EVENTOUT
       
        TIM3->ARR=arr;                    //设定计数器自动重装值   
        TIM3->SC=psc;                    //预分频器
       
        TIM3->CCMR1|=1<<8;                //CC2S=01         选择输入端 IC2映射到TI2上
        TIM3->CCMR1|=3<<12;         //IC2F=0011 配置输入滤波器
        TIM3->CCMR1|=0<<10;         //IC2PS=00         配置输入分频,不分频

        TIM3->CCER|=1<<5;                 //CC2P=1        下降沿捕获
        TIM3->CCER|=1<<4;                 //CC2E=1         允许捕获计数器的值到捕获寄存器中

        TIM3->SMCR|=6<<4;     //触发选择:滤波后的定时器输入2(TI2FP2)   ??
        TIM3->SMCR|=7<<0;     //外部时钟模式1
       
        TIM3->CR1|=1<<0;      //使能定时器3
}


现在的问题是,我的输入是每分钟6000个低电平,也就是1秒100个低电平,
通道5捕获的CNT数据输出没有问题
但是通道3的CNT数据输出居然为370000多……
请问各位大大,我的代码哪有问题……跪谢……

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-10-18 20:17:04 | 显示全部楼层
先单独测试,OK再联调。
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-10-18
在线时间
0 小时
 楼主| 发表于 2016-10-19 09:40:34 | 显示全部楼层
正点原子 发表于 2016-10-18 20:17
先单独测试,OK再联调。

我一直在单调啊……单调PA0(TIM5_CH1)没问题,单调PA7就不行……
回复

使用道具 举报

6

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
863
金钱
863
注册时间
2016-2-17
在线时间
192 小时
发表于 2016-10-19 13:14:51 来自手机 | 显示全部楼层
PA0要下拉吧
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-10-18
在线时间
0 小时
 楼主| 发表于 2016-10-19 15:57:10 | 显示全部楼层

捕捉低电平为什么要下拉?我是小白,不懂
回复

使用道具 举报

6

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
863
金钱
863
注册时间
2016-2-17
在线时间
192 小时
发表于 2016-10-19 17:40:08 | 显示全部楼层
litcrad 发表于 2016-10-19 15:57
捕捉低电平为什么要下拉?我是小白,不懂

奥, 看成高电平了===.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 17:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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