中断驱动的自行车码表
来源:互联网 发布:linux删除一个目录 编辑:程序博客网 时间:2024/04/28 10:04
PA11和PA12的GPIO设置:
//main.c
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;//PA11下降沿触发中断
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;//PA12下降沿触发中断
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);//设置中断优先级,enable中断向量表
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
接下来需要在stm32f1xx_it.c中实现EXTI15_10_IRQHandler:
void EXTI15_10_IRQHandler(void){
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11)!=0){
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
}
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_12)!=0){
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}
}
然后调用HAL_GPIO_EXTI_Callback来判断并处理中断,消除标志位:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
switch(GPIO_Pin){
caseGPIO_PIN_11:
printf("Pressed\r\n");
mode=!mode; //更改模式
break;
caseGPIO_PIN_12: //增加一圈距离
counter++;
break;
}
}
定时器中断:
定时器初始化:
void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_Handler.Instance = TIM3;
TIM_Handler.Init.Prescaler = 48000;
TIM_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM_Handler.Init.Period = 199; //200ms
TIM_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&TIM_Handler);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&TIM_Handler, &sClockSourceConfig);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&TIM_Handler,&sMasterConfig);
}
计时器中断处理函数:
//stm32f1xx_it.c
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM_Handler);
}
//main.c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){
if(htim->Instance == TIM3){
timer_flag= 1; //设置flag
timer_counter++;
}
- 中断驱动的自行车码表
- 自行车码表
- Lab3: 自行车码表
- Lab3:自行车码表
- Lab 3:自行车码表
- LAb3-自行车码表
- 实验三:自行车码表
- Lab 3:自行车码表
- 自行车码表CPU选型
- PRi——自行车码表
- 嵌入式 LAB 3:自行车码表
- 嵌入式lab3——自行车码表
- WINCE6.0的中断驱动
- linux 驱动的 中断小结
- 按键中断的驱动代码
- linux设备驱动的中断
- 自行车码表使用说明—SIGMA(西格玛) BC906
- 嵌入式开发之 STM32自行车码表(图文)
- Android如何高效加载大图
- android NDK实现
- 自行车码表CPU选型
- 【Maven】快速走进Maven的世界
- Cortex指令集相比ARM的优势
- 中断驱动的自行车码表
- KMP算法详解
- 优先级反转
- mybatis二级缓存应用及与ehcache整合
- 我的丑陋计算器1.0
- C#中System.Func<>与System.Action<>的区别
- C/C++内存管理机制
- Git具体问题:如何安全的push文件到工作分支
- 记录Mybatis和Ehcache结合时启用延迟加载的一个坑