1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前两天谢了一个中断程序,检查,编译什么的都没有问题。可是下到单片机后操作没反应。哪位能帮忙看看什么问题。
键盘通过PA0口控制PE7口LED灯闪烁。键盘接有上拉电阻,按下开关时PA0口为高电平。 #include <STM32f10x_lib.h> u32 LED; //#define KEY GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3) //#define LED0 GPIO_ReadOutputDataBit(GPIOE,GPIO_Pin_4) void RCC_Configuration() //配置STM32的时钟 & 打开IO口时钟 { ErrorStatus HSEStartUpStatus;//定义外部高速晶体启动状态枚举变量 RCC_DeInit();//复位RCC外部设备寄存器到默认值 RCC_HSEConfig(RCC_HSE_ON);//打开外部高速晶振 HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速时钟准备好 if(HSEStartUpStatus==SUCCESS)//外部高速时钟已经准备好 { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //选择FLASH预取指缓存的模,预取指缓存使能 FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数 FLASH_Latency_2 2延时周期 RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB(HCLK)时钟=SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1);//配置APB2(PCLK2)时钟=AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1(PCLK1)时钟=AHB 1/2时钟 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//配置PLL时钟=外部高速晶体时钟*9 RCC_PLLCmd(ENABLE);//使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//等待PLL时钟就绪 {} RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟=PLL时钟 while(RCC_GetSYSCLKSource()!=0x08)//检查PLL时钟是否作为系统时钟 {} } RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE,ENABLE); //允许GPIOA、GPIOE时钟 这里根据要输出的IO口设置 } void GPIO_Configuration(void) //配置STM32的GPIO口功能 { GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; //指定IOA口的引脚 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //指定IOA口的模式 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定速度 GPIO_Init(GPIOA,&GPIO_InitStructure); //设置使之有效(真正的初始化IO端口和端口设置) /* GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; //指定IOE口的引脚 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //指定IOE口的模式 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//指定速度 */ GPIO_Init(GPIOE,&GPIO_InitStructure); //设置使之有效(真正的初始化IO端口和端口设置) } void delay_ms(u16 T) { u16 i,j; for(i=0;i } void EXTIX_Init() { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2); EXTI_InitStructure.EXTI_Line = EXTI_Line2; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTI0_IRQHandler(void) { u32 KEY0; KEY0=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0); delay_ms(10); if(KEY0==1) { LED=!LED; } EXTI_ClearITPendingBit(EXTI_Line2); } int main() { RCC_Configuration(); GPIO_Configuration(); //对IO口进行初始化 EXTIX_Init(); GPIO_SetBits(GPIOE,GPIO_Pin_7); LED=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7); while(1); } |
|
相关推荐
4个回答
|
|
楼主的E端口的2脚配置为输出推挽了,改为输入上拉模式。
|
|
|
|
是这问题么?
|
|
|
|
配置问题再查查
|
|
|
|
你这程序乱的可以看出你完全不懂啊,你要用PA0读入键盘就该配置成输入模式,然后GPIO_EXTILineConfig这里选择GPIO管脚用作外部中断线路,就应该是GPIO_PortSourceGPIOA,GPIO_PinSource0,EXTI_Line 选择外部中断线应该是 EXTI_Line0,优先级组别你也没设置NVIC_PriorityGroupConfig,最后就是中断函数里面 EXTI_ClearFlag( EXTI_Line0),清除中断标志这是必须的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12026 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 09:47 , Processed in 0.489589 second(s), Total 49, Slave 41 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号