嵌入式 > 技术百科 > 详情

STM8L固件库外部中断的使用及注意事项

发布时间:2021-03-18 发布时间:
|

1.初始化函数


GPIO_Init(GPIOB, GPIO_Pin_3, GPIO_Mode_In_FL_IT);

EXTI_SetPinSensitivity(GPIO_Pin_3, EXTI_Trigger_Falling);//有误,下文会说明


2.中断函数


INTERRUPT_HANDLER(EXTI3_IRQHandler,11)

{


EXTI_ClearITPendingBit(EXTI_IT_Pin3);


//


}


3.问题及说明


关于函数的具体使用我就不多说了,在固件库和手册里都可以找到。在测试的时候发现信号输入为下降沿并保持低电平时会反复触发,很像是被配置成了下降沿和低电平触发模式。我调试了很久都没找到问题,最后再看了一遍库函数,正确的配置是


EXTI_SetPinSensitivity(EXTI_Pin_3, EXTI_Trigger_Falling);


一开始我也注意到了应该用EXTI_Pin_3而不是GPIO_Pin_3,但是根据我编写AVR的经验,我认为这两个宏都定义为3,如果不是3也应该相同,所以没有多想。


打开对应头文件,看看这两个宏定义


  GPIO_Pin_0    = ((uint8_t)0x01),   /*!< Pin 0 selected */

  GPIO_Pin_1    = ((uint8_t)0x02),   /*!< Pin 1 selected */

  GPIO_Pin_2    = ((uint8_t)0x04),   /*!< Pin 2 selected */

  GPIO_Pin_3    = ((uint8_t)0x08),   /*!< Pin 3 selected */

  GPIO_Pin_4    = ((uint8_t)0x10),   /*!< Pin 4 selected */

  GPIO_Pin_5    = ((uint8_t)0x20),   /*!< Pin 5 selected */

  GPIO_Pin_6    = ((uint8_t)0x40),   /*!< Pin 6 selected */

  GPIO_Pin_7    = ((uint8_t)0x80),   /*!< Pin 7 selected */




  EXTI_Pin_0 = (uint8_t)0x00, /*!< GPIO Pin 0 */

  EXTI_Pin_1 = (uint8_t)0x02, /*!< GPIO Pin 1 */

  EXTI_Pin_2 = (uint8_t)0x04, /*!< GPIO Pin 2 */

  EXTI_Pin_3 = (uint8_t)0x06, /*!< GPIO Pin 3 */

  EXTI_Pin_4 = (uint8_t)0x10, /*!< GPIO Pin 4 */

  EXTI_Pin_5 = (uint8_t)0x12, /*!< GPIO Pin 5 */

  EXTI_Pin_6 = (uint8_t)0x14, /*!< GPIO Pin 6 */

  EXTI_Pin_7 = (uint8_t)0x16  /*!< GPIO Pin 7 */


可以看到并不相同。


再查看手册,中断默认配置为下降沿和低电平触发模式。


小结:


使用库函数固然很方便快捷,但是有时候不能过于图方便,遇到问题要仔细看库函数和手册。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用于MAX7456随屏显示器SPI