按键驱动的实验

按键驱动实验与led以及beep在整体使用逻辑上一样,只是按键是输入模式。
找到按键使用的引脚
查看底板原理图可知,按键是key0,断开状态时key0是高电平,接通是低电平。
查看io引用图可知,key0使用的是uart1 cts引用。
查看i.mx6ull参考手册,uart1 cts复用为gpio之后是gpio01_io18:
初始化gpio01_io18,配置电气属性并设置为输入// 将uart1_cts_b利用为gpio01_io18iomuxc_setpinmux(iomuxc_uart1_cts_b_gpio1_io18, 0);// 配置电气属性iomuxc_setpinconfig(iomuxc_uart1_cts_b_gpio1_io18, const_gpio_input_pad_value);// 配置gpio方向以及默认值gpio_init(gpio1, 18, (gpio_config){gpio_direction_input, 0});读取按键状态复用并初始化完gpio1_io18后通过读取gpio1_io18的电平状态就可以知道当前按键状态了。按键接下时为低电平,按钮弹起时为高电平。
但是在读取按键状态时有一个问题,就是由于按键在按下时短时间内的电平状态可能不稳定,在读取的时候需要做一个延时读取操作,防止读取的异常的电平状态,它的读取代码如下:
if (gpio_redvalue(gpio1, 18) == 0){ //此时的电平是低电平,表示按钮是接下状态 //为了防止电平抖动,延迟10ms再读取一下电平状态,如果还是按下表示按钮按下并且稳定 delay(10); if (gpio_redvalue(gpio1, 18)) { return 1; } else { return 0; }}else{ // 按钮松开 return 0;}修改主程序逻辑这里改成按键按下则led亮同时beep响
clk_init();led_init();beep_init();key0_init();while (1){ delay(10); if (key0_getvalue()) { led_on(); beep_on(); } else { led_off(); beep_off(); }}return 0;编译,烧写验证make install

轴承温度过高怎么治理-轴承润滑11种润滑不足造成轴承损伤级别
美国Gema Touch开发出新型NFC标签
编译环境和交叉编译环境的搭建
RISC-V单板计算机发展现状
什么是STM32Trust?ST最新发布一种支持STM32的SMI技术
按键驱动的实验
英飞凌推出ESD3v3u4ulc阻尼二极管
华为鸿蒙系统已投入上亿资金 替代谷歌安卓快了?
AutoML到底是怎样设计模型的?有哪些优势?
电瓶修复技术:电池制动能量回收的详解
辐射骚扰整改思路及方法:匝数的影响
Fusion-io 每秒1TB持续带宽破行业纪录
中国碳纤维产业发展迅速 成功研制T800碳纤维赶超日本
要闻摘选:Stellantis成立汽车软件部门 比亚迪发布高端品牌仰望
华舞依旧,未来不远:智能光伏十大趋势告诉我们什么?
明基ScreenBar屏幕挂灯评测 颇具实用性和人性化的功能
设备安装质量通病原因及预防措施
仿人眼传感器捕获生动图像,有助推动人工视网膜技术发展
衍射光栅的闪耀波长现象
通过三个案例搞懂极值搜索控制