stm32中外部中断IO口设置后,会影响同一组的其他引脚吗?

我出现的问题是:设置PB8为外部中断,用按键控制,外部接上拉电阻方式。PA8为液晶显示的SCL(PA11是SDA)。当我没有使用中断的方式的时候,液晶显示正常,刷屏速度很... 我出现的问题是:
设置PB8为外部中断,用按键控制,外部接上拉电阻方式。PA8为液晶显示的SCL(PA11是SDA)。当我没有使用中断的方式的时候,液晶显示正常,刷屏速度很快,根据示波器显示PA8可以达到50KHz。
但是当我设置了PB8为外部中断的时候,液晶显示就出问题,依然根据程序显示,但是非常慢。外部中断功能正常。经过调试发现这个时候PA8最多只能达到50Hz。可以更慢,但是不能更快。而PA11最高可以达到50KHz。
如果系统初始化中不执行EXTIX_Init(void),液晶显示就很正常。
以下是外部中断和液晶显示IO口的配置程序。
void EXTIX_Init(void)
{
//IO口初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PB.8 端口配置, 上拉输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO
GPIO_SetBits(GPIOB,GPIO_Pin_8); //PB.8 上拉输入

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用功能时钟,辅助功能IO时钟使能
//GPIOB.8 中断线以及中断初始化配置,下降沿触发
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8);
//中断线上中断初始化
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line=EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //初始化中断线参数
//中断优先级初始化
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按键外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PB端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PA.8 端口配置, 推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PA.11 端口配置, 推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOA,GPIO_Pin_11); //PA.11 输出高
}
于是我又进一步调试,逐条屏蔽void EXTIX_Init(void)里面的语句。发现如果只屏蔽
“EXTI_InitStructure.EXTI_LineCmd = ENABLE;”这一句的时候,液晶屏也会正常,但是外部中断不响应。
感觉外部中断PB8启用后,影响了PA8脚的速度。
请大虾指点。
主函数里面的初始化函数
void Sys_Init(void)
{
SystemInit();
EXTIX_Init(); //外部中断初始化
delay_init(); //延时初始化
PORT_Init();
LCD_Intial();//初始化LCD
}
展开
 我来答
wm0478
推荐于2018-04-01 · TA获得超过430个赞
知道小有建树答主
回答量:354
采纳率:97%
帮助的人:202万
展开全部
看你的配置,很明显是 GPIO 模拟I2C操作。
一旦中断打断了I2C时序,很哟可迹橡羡能不正常(比如读不到ACK的情况)。
建议你在LCD更新数据函数里面, 关键操作之前把EXIT关闭,操作完成后再打开。至于那个是关键操作,仔细看你的LCD手册里面关于通信时序如念的部姿拍分。
估计你的中断就是个按键 ,其实完全可以用查询方式读取按键状态。
搅史棍455
2016-10-19
知道答主
回答量:29
采纳率:0%
帮助的人:6.2万
展开全部
端口肯定是多功能复用岁培端口,要到相应的寄祥隐存乎宴唯器进行设置。
你那些程序都是些写好的函数,最好是用底层的寄存器进行编写程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
11kxmx
2016-10-19 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:70%
帮助的人:2416万
展开全部
真不知道怎么回事,经你这一说,应用时真得注意了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式