STM8L固件库外部中断的使用及注意事项
2014-07-21 12:45
351 查看
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 */
可以看到并不相同。
再查看手册,中断默认配置为下降沿和低电平触发模式。
小结:
使用库函数固然很方便快捷,但是有时候不能过于图方便,遇到问题要仔细看库函数和手册。
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 */
可以看到并不相同。
再查看手册,中断默认配置为下降沿和低电平触发模式。
小结:
使用库函数固然很方便快捷,但是有时候不能过于图方便,遇到问题要仔细看库函数和手册。
相关文章推荐
- STM32外部中断处理流程及注意事项
- stm32 使用外部时钟的注意事项(jlink调试输出无信息)
- 单片机中断使用注意事项
- THinkPHP在模板中的volist循环使用外部变量注意事项
- 第十五章:外部中断EXTI的配置注意事项
- 关于在使用babylon导入外部模型的时候要注意的事项
- [小结]select的使用注意事项
- 在oracle中字段类型LONG的使用注意事项
- (To Me Just)c#中的WebBrowser类的使用注意事项!
- 使用Oracle9i数据库的注意事项
- 使用Ajax技术获得服务端信息时的注意事项
- C#使用CDO发送邮件 注意事项!!!
- 使用UltraWebGrid控件分页功能注意事项
- response.sendRedirect()使用注意事项
- 在asp.net 2.0中使用CuteEditor 5.0的一个注意事项
- C++构造函数中使用new时应注意的事项!
- ruby中字符串的转码 使用方法以及注意事项
- Rhapsody 5.2在VS.NET 2003中使用的注意事项
- struts在页面中使用form标记的注意事项
- 在jsp使用标签库的一些注意事项