注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
damiaa的个人空间 https://home.eeworld.com.cn/space-uid-59433.html [收藏] [复制] [分享] [RSS]
日志

【ST NUCLEO-U5A5ZJ-Q开发板测评】4 定时中断处理按键和led

已有 176 次阅读2024-3-9 13:53 |个人分类:STM32

【ST NUCLEO-U5A5ZJ-Q开发板测评】4 定时中断处理按键和led
上篇文章中在程序中加入了定时中断Tim6,这次主要是用定时中断来处理按键,led,当然后续也可以进行数据定时采集。这里就先来处理按键和led吧,定时器Tim7处理按键,led还是用Tim6。开始!
  1. 加入定时器7,选择下面五项目
  2. 选择开启中断
三、保存生成代码:
四、在定时器Tim7初始化中加入函数开启定时器中断:
五、在回调函数中加入代码判断是否有Tim7中断产生
六、按键硬件电路确定,这里就直接使用板子上的USER按键:
检查一下SB58和SB59跳线情况:是SB58短接,SB59没接,那就是PC13
按键是内部下拉电阻的,也就是平常是低电平,按下搞电平。
七、按键程序实现
1,定义结构体
//该结构定义个基于定时器的键盘检测动作
typedef struct
{
uint8_t lastedgeVal; //上次电平状态
uint8_t nowedgeVal;//这时电平状态
uint8_t act;//是按下1 弹起0 还是没动作 2。
uint16_t chkbuf;
}KEYCHKS;
//定时检查位存储,也就是16位中的最低位存储电平状态,当存储后左移一 ////次,为下次存储准备,这样连续16次后数据就全部进入chkbuf,下次再存储电平就把高位丢////弃,始终保存最近16次状态。
如果chkbuf为0xffff那把nowedgeVal设置为 1,如果同时lastedgeVal为0 设置act为0 表示弹起,并且设置lastedgeVal为1。
如果chbuf为0 把nowedgeVal设置为 0 ,如果同时lastedgeVal为1 设置act为1 表示按下,并且设置lastedgeVal为0
主程序使用时只需要 根据act判断出弹起和按下,使用完毕后act设置为2
根据 lastedgeVal nowedgeVal判断出现在的电平状态。
按下亮蓝灯,弹起亮绿灯
八、代码如下:
九、演示
先汇报到这里,感谢支持。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章