STM32 CubeIDE矩阵键盘扫描放入外部中断失败

博主在尝试将矩阵键盘扫描程序放入STM32 G070RB的外部中断回调函数中时遇到问题,导致程序停止运行或中断回调函数仅执行一次。尝试了禁用和启用中断、设置标志量等方法,但问题未解决。在主函数调用扫描程序时一切正常,外部中断与键盘扫描的结合成为难点。
摘要由CSDN通过智能技术生成

使用G070RB编了一个矩阵键盘扫描程序. 如下图, 1-4轮流拉低, 5-8检测输入确定是哪个键按下. 然后用1602液晶显示. 写完后在主函数中调用, 正常运行没有问题.
做完后想试试用外部中断调用是否可以. 于是用J25的引脚接了A11的外部中断. 在中断回调函数中调用键盘扫描程序. 结果出乎意料. 失败!!! 不知道什么原因. 记录在此,以后再看看吧. 主要尝试的内容有:

  1. 外部中断下降沿触发,回调函数中直接调用键盘扫描程序. 结果按键一按程序直接停止. printf内容显示连驱动1602显示的定时器回调函数也不能进入了. 按键更是一个也没有扫描到.
  2. 在上述基础上修改, 进入外部中断后使用HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);失能外部中断, 键盘扫描后再使能. 仍然没有任何改变.
  3. 修改外部中断回调函数, 删除键盘扫描函数, 只放置一个标志量, 置一后在主函数中用if语句清零并调用键盘扫描函数. 结果有点改变, 只能进入一次外部中断回调函数, 然后再不进去了. 但是驱动1602显示的定时器回调函数一直正常.
  4. 删除该标志量, 返回原始状态, 在主函数中调用键扫程序, 外部中断中只留一个LED, printf内容显示每次按键都能进入外部中断,改变LED亮灭, 按键扫描也正常工作. 为啥上面的步骤就不行呢? 晕.
    接线图
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
   
	if(GPIO_Pin == GPIO_PIN_11)
	{
   
		//HAL_Del
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值