STM32F401 外部中断误触发问题
现象:调试STM32F411低功耗的时候,使用的PA1做个唤醒源,发现在没有触发EXTI的时候,MCU居然被唤醒。
原因:PA1配置成EXTI(上拉输入),经常被误触发
解决方式:将PA1配置成浮空输入,并且外部上拉一个4.7k电阻,就不会误触发了。
这种bug的原因一直没有搞清,先记下省的以后就忘记了,猜测可能是STM32芯片bug。
EXTI配置代码如下:
void TM_SetExit(FunctionalState State)
{
//PA1
#define REQUEST_PORT GPIOA
#define REQUEST_PIN GPIO_Pin_1
#define REQUEST_CLK_BUS RCC_AHB1Periph_GPIOA
#define REQUEST_PORT_SRC EXTI_PortSourceGPIOA
#define REQUEST_PIN_SRC GPIO_PinSource1
#define REQUEST_EXTI_LINE EXTI_Line1
#define REQUEST_NVIC_CHANNEL EXTI1_IRQn
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_AHB1PeriphClockCmd(REQUEST_CLK_BUS, ENABLE);
GPIO_InitStructure.GPIO_Pin = REQUEST_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//GPIO_PuPd_UP;
GPIO_Init(REQUEST_PORT, &GPIO_InitStructure);
SYSCFG_EXTILineConfig(REQUEST_PORT_SRC, REQUEST_PIN_SRC);
NVIC_InitStructure.NVIC_IRQChannel = REQUEST_NVIC_CHANNEL;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = State;
NVIC_Init(&NVIC_InitStructure);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_LineCmd = State;
EXTI_InitStructure.EXTI_Line = REQUEST_EXTI_LINE;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
EXTI_ClearITPendingBit(REQUEST_EXTI_LINE);
}
最新文章
- Celery 框架学习笔记
- jquery easyui的treegrid的控制
- C#==>;匿名方法 【转】
- Django 源码小剖: Django 对象关系映射(ORM)
- Java API —— 泛型
- 让Visual Studio 2015 支持ASP.NET MVC4.0.0.1
- JNI|在子线程中获得JNIEnv|AttachCurrentThread
- sql查询结果集根据指定条件排序的方法
- ListView 的position和id的区别
- Hibernate学习之表一对多,多对一关系
- 查询ID为5的数据的前后各一行数据,ID不连续
- Appium和Robotium在文字输入上的区别
- 翻译:MLAPP(2.3节 一些常见的离散分布)
- Minimize the error CodeForces - 960B
- 下拉框、下拉控件之Select2。自动补全的使用
- String对象的属性和方法
- SpringMVC @ResponseBody 406
- C#调用迅雷下载,调用迅雷影音播放
- maven的安装与基本使用
- iOS ReplayKit实时录制屏幕实现方案的细节记录