使用G070RB编了一个矩阵键盘扫描程序. 如下图, 1-4轮流拉低, 5-8检测输入确定是哪个键按下. 然后用1602液晶显示. 写完后在主函数中调用, 正常运行没有问题.
做完后想试试用外部中断调用是否可以. 于是用J25的引脚接了A11的外部中断. 在中断回调函数中调用键盘扫描程序. 结果出乎意料. 失败!!! 不知道什么原因. 记录在此,以后再看看吧. 主要尝试的内容有:
- 外部中断下降沿触发,回调函数中直接调用键盘扫描程序. 结果按键一按程序直接停止. printf内容显示连驱动1602显示的定时器回调函数也不能进入了. 按键更是一个也没有扫描到.
- 在上述基础上修改, 进入外部中断后使用HAL_NVIC_DisableIRQ(EXTI4_15_IRQn);失能外部中断, 键盘扫描后再使能. 仍然没有任何改变.
- 修改外部中断回调函数, 删除键盘扫描函数, 只放置一个标志量, 置一后在主函数中用if语句清零并调用键盘扫描函数. 结果有点改变, 只能进入一次外部中断回调函数, 然后再不进去了. 但是驱动1602显示的定时器回调函数一直正常.
- 删除该标志量, 返回原始状态, 在主函数中调用键扫程序, 外部中断中只留一个LED, printf内容显示每次按键都能进入外部中断,改变LED亮灭, 按键扫描也正常工作. 为啥上面的步骤就不行呢? 晕.
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_11)
{
//HAL_Del