完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
公司准备开发一款手持智能硬件,经过讨论决定使用STM32F103C8T6作为主控芯片;核心功能是一个按键中断,长按、短按分别实现不同的功能(规定大于1s为长按,否则视为短按)。
按键功能分析:需要使用2个定时器中断进行判定(TIM2、TIM3),TIM2进行判断长按和短按的抬起有效,实现长按和短按;TIM3作为定时器,定时1s;TIM2和TIM3的定时周期为10ms。 代码: 1、在stm32f10x_it.c中添加定时器中断函数,GPIOB Pin8作为按键的引脚 void TIM2_IRQHandler(void) { if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) { if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == KEY_ON) //有键按下时判断有效按下和无效按下 { if(key_count3 > 3) //3个周期扫描,判定为有效按下 3*10ms = 30ms key_press_time ++; }else { key_count3 ++; key_press_time = 0; } }else { if(key_count3 > 3 && !key_is_clicked) //如果按键为有效按下又抬起,则执行动作 { key_is_clicked = 1; } key_count3 = 0; } TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); } } void TIM3_IRQHandler(void) //1s计时 { if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET ) { TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update); time3 = TIM_COUNTS;//100 } } 2、main()中实现功能函数 if(key_is_clicked) { if(key_press_time >= TIM_COUNTS) { if(Video_Status) { Mavlink_Video_Switch(send_buf, &send_len); Uart_SendData_Gimbal(USART1, send_buf, &send_len); LED1(ON); Delay(4000000); LED1(OFF); Delay(4000000); } else { Mavlink_Video_Closed(send_buf, &send_len); Uart_SendData_Gimbal(USART1, send_buf, &send_len); LED1(ON); Delay(2000000); LED1(OFF); Delay(2000000); } Video_Status = !Video_Status; } else{ Mavlink_Photo_Switch(send_buf, &send_len); Uart_SendData_Gimbal(USART1, send_buf, &send_len); LED1(ON); Delay(100000); LED1(OFF); Delay(100000); if(!Video_Status) Photo_Status = 1; } key_is_clicked = 0; } if(!Video_Status){ LED1(ON); Delay(1500000); LED1(OFF); Delay(1500000); if(Photo_Status){ / LED2(ON); Delay(1000000); LED2(OFF); Delay(1000000); Photo_Status = !Photo_Status; } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:45 , Processed in 0.614326 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号