STM32外部中断探索实践
因为到目前为止,各种技术问题都迎刃而解了,所以从前天开始的中断编程遇阻后,暗想“这可能是硬骨头”了,昨天用CubeMX配置外部中断项目,就是把某个引脚开关作为中断源来优先处理,以提高开关响应速度,要知道我的这个开关在原有代码中是作为普通输入,结果遇到延时函数时,就会长时间卡住,开关状态得不到检测。我有两种方案,一种是使用中断函数要求CPU立即处理,另一种就是引入FreeRTOS库做多个线程。但我以前并没有玩过中断,不用岂不可惜,况且日后多种通信过程中都要做中断编程啊。所以昨晚是“吃定中断技术”的心态,结果却是反复生成无数回配置代码,反复尝试了无数次中断编程,那个Callback函数就是不执行。
所以今天就想“跟中断拼到底”,反复查看同行对此问题的解决方法,这过程中,对中断代码框架的调用和执行过程已经非常清晰了。傍晚就直接打开uVision检查项目代码,发现那个it文件里缺少关键调用!这就不正常啊,然后再去CubeMX中查看配置,发现缺少那个什么external interrupt line设置项,我敢说昨天我明明每一次都设置了,但它什么时候跑丢了,我就不知道了,我的观点当然是“老天爷又搞现用现造了”,总之这回既然盯住了,再生成代码时,那个it文件中的框架代码就跑不了,然后我要注意不能在中断函数中无原则使用HAL_Delay(),想用的话要先设置它所依赖的那个什么sysclock优先级,提高它,实质是降低外部中断优先级为2就行。
然后我重新编译代码,一边担心自己在main中加的那个callback会让编译器看不见,结果却证明根本没有问题。运行成功了。网上好几个大神儿都说要在那个it文件中编写代码吧,但有个人说是在main文件中,我吓得做好准备尝试了,结果main中完全可以啊,而且这才是我需要的地方。
研究代码过程中,一边揣测同行提出的各种问题和解答,发现他们很多老师其实对C++编程不太了解,反而好多人说CubeMX不好哈哈。而如今Simon看到这个东西果真是个神器,而且前天我已经把使用USB 自定义HID设备的编程过程弄清楚了,包括做驱动程序,都很简单,因为有现成的工具。
所以未来,想做什么项目,就能做什么项目了。