STM32——震动传感器点亮LED灯
2023-12-13 23:51:42
震动传感器简单介绍
若产品不震动,模块上的
DO
口输出高电平;
若产品震动,模块上的
DO
口输出低电平,D0-LED绿色指示灯亮。
震动传感器与STM32的接线
编程实现
需求:当震动传感器接收到震动信号时,使用中断的方式点亮led1。
1、打开cubeMX
a.在SYS中选择调试方式为串行线调试。
b.在RCC(复位和时钟控制)中选择?HSE(高速时钟)为crystal resonator(晶振)。
c.在CLOCK Configuration中沿着红色的主线依次选择,并将频率改为72MHZ。
?
d.在GPIO中选择PB8(LED1)为GPIO_output,PA4为中断方式触发,选择GPIO_XETI 4,并且因为震动传感器震动,模块上的DO口输出低电平,所以将GPIO_mode设置为下降沿触发,由于一开始需要让led1是灭的状态,所以设置PB8的GPIO output level为HIGH。
?
?e.在NVIC中打开PA4的中断,使能中断。
f.?在Project Manager中设置工程名字、开发环境选择MDK-ARM,并且勾选以下两个选项
?
g. Generate?Code
2、打开KEIL5工程
a.先进行编译,然后找到EXTI 4中断服务程序,选中调用的函数点击F12,跳转到被调用函数
?b.将虚函数复制到main函数文件中,进行编写
?c.添加延时,接收到震动信号就亮1秒
但是延时有个坑!!!
如果直接在中断服务函数里调用
HAL_Delay
函数,则会造成系统卡死。
原因:程序初始化时
默认把滴答定时器的中断优先级设为最低
,其它中断源很容易打断它导致卡
死。
解决:在
main
函数里使用以下函数提高滴答定时器的中断优先级(提升至
0
):
HAL_NVIC_SetPriority
(
SysTick_IRQn
,
0
,
0
);
并且将
EXTI4
的中断优先级设置比滴答定时器的中断优先级小,比如
2
。
?
?
文章来源:https://blog.csdn.net/qq_61391875/article/details/134830127
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!