标签: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); }
先进行时钟设置,开启时钟后,根据周期测量需要在测量地方获取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);
}
标签:hid nvic 32位 ini 通过 usart 32bit 任务 ==
原文地址:https://www.cnblogs.com/luxingsh/p/12865563.html