码迷,mamicode.com
首页 > 其他好文 > 详细

TIMX->CNT数值读取

时间:2020-05-10 23:12:30      阅读:438      评论:0      收藏:0      [点我收藏+]

标签:hid   nvic   32位   ini   通过   usart   32bit   任务   ==   

为了实现脉冲测量有时候需要使用定时器计数,STM32的定时器计数精度不错,独立于程序之外。可以通过软件对其设定。当想要对信号进行测量时,只要设置好定期器就行。

举例说明:

例,如想要通过TIMER5定时器实现某信号周期测量。

技术图片
void TIM5_IRQHandler(void)
{ 

if(TIM3->SR&0X0001)//溢出中断
{
LED1=!LED1;    
}    
//TIM3->CNT &= 0x0;
TIM3->SR&=~(1<<0);//清除中断标志位 
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM5_Int_Init(u16 arr,u16 psc)
{
NVIC_InitTypeDef NVIC_InitStructure;

RCC->APB1ENR|=1<<3;    //TIM5时钟使能 
TIM5->ARR=arr; //设定计数器自动重装值 
TIM5->PSC=psc; //预分频器设置
TIM5->DIER|=1<<0; //允许更新中断    
TIM5->CR1|=0x01; //使能定时器3

// 配置NVIC为优先级组1 /
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

//配置中断源:按键1 
// NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
//配置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
// 配置子优先级 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
// 使能中断通道 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); 
}
View Code

先进行时钟设置,开启时钟后,根据周期测量需要在测量地方获取TIMX->CNT数值并进行保存。本例是测量数据发送周期,每次数据完成32bit时获取计数器值进行保存,同时清空计数器值。

//串口任务的任务函数
void usart_task(void *pvParameters)
{
while(1)
{
if(dis_in_cnt == 32){ //第32位计数输入完成则进入串口传输
timer3_cnt = TIM5->CNT;
TIM5->CNT = 0;

//省略部分无关代码

}
vTaskDelay(10);
}

TIMX->CNT数值读取

标签:hid   nvic   32位   ini   通过   usart   32bit   任务   ==   

原文地址:https://www.cnblogs.com/luxingsh/p/12865563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!