完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我自己写的一个中断,搞了好久了,一直不行,系为初学者,不懂太多,希望大伙能帮忙解决
|
|
相关推荐
4个回答
|
|
把问题直接贴出来,不要让帮你解决问题的人还要付E币下载你的程序。
|
|
|
|
程序如下,不是想赚什么E币,而是我感觉是中断与库扥关系没有配置好,但有不知道怎么改 #include 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_0; //指定IOA口的引脚 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //指定IOA口的模式 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定速度 GPIO_Init(GPIOA,&GPIO_InitStructure); //设置使之有效 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //指定IOC口的引脚 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //指定IOC口的模式 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //指定速度 GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_4); //将PC.4引脚设置为低电平输出,是按键另一边检测低电平 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7; //指定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_PortSourceGPIOA,GPIO_PinSource0); //设置PA0口为相应的中段线路 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //选择中断线路0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断请求 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //设置中断触发方式下降沿 EXTI_InitStructure.EXTI_LineCmd=ENABLE; //使能 EXTI_Init(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2; NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure); } void EXTI0_IRQHandler(void) { static u8 flag; delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0) { if(flag==1) { flag=0; GPIO_ResetBits(GPIOE,GPIO_Pin_7); } if(flag==0) { flag=1; GPIO_SetBits(GPIOE,GPIO_Pin_7); } } //GPIO_ResetBits(GPIOE,GPIO_Pin_7); EXTI_ClearITPendingBit(EXTI_Line0); //清空中断标志位,防止持续进入中断 } int main() { RCC_Configuration(); GPIO_Configuration(); //对IO口进行初始化 EXTIX_Init(); GPIO_SetBits(GPIOE,GPIO_Pin_7); //GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7); while(1); } |
|
|
|
|
|
|
|
嗯,粗心了,是这个问题,解决了,谢谢!!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1085 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1041 浏览 2 评论
2145 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1240 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1660 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:52 , Processed in 0.741004 second(s), Total 103, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号