高中生
最后登录1970-1-1
在线时间 小时
注册时间2021-10-21
|
本帖最后由 嵌入式小明 于 2022-2-28 11:44 编辑
视频:【单片机】野火STM32F103教学视频 (配套霸道/指南者/MINI)【全】(刘火良老师出品) (无字幕)_哔哩哔哩_bilibili
作业1
我根据老师讲课的内容修改了代码,发现KEY2一直没有反应(派出按键损坏的可能),然后我参考了老师给出的例程代码,感觉没啥区别,但是我还是按照老师的方式修改了自己 的代码,和老师不同的地方在于,老师的例程,硬件相关部分都是使用了宏定义,而我没有使用。发现还是KEY2的中断无法产生。
希望老师或者其他小伙伴能帮我看看问题出在哪里。感谢大家。一下是我的代码
- //bsp_led.c代码
- //bsp:board support package 板级支持包
- #include "bsp_led.h"
- void LED_GPIO_Congig(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- RCC_APB2PeriphClockCmd(LED_GPIO_CLK , ENABLE);
- GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
- GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
- GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);
- //关闭所有灯
- GPIO_SetBits(LED_B_GPIO_PORT, LED_B_GPIO_PIN);
- GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
-
- }
复制代码- //bsp_led.h代码
- #ifndef __BSP_LED_H
- #define __BSP_LED_H
- #include "stm32f10x.h"
- #define LED_GPIO_CLK RCC_APB2Periph_GPIOB
- #define LED_G_GPIO_PIN GPIO_Pin_0
- #define LED_G_GPIO_PORT GPIOB
- #define LED_B_GPIO_PIN GPIO_Pin_1
- #define LED_B_GPIO_PORT GPIOB
- #define ON 1
- #define OFF 0
- #define LED_G(a) if(a) GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); \
- else GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
- #define LED_G_TOGGLE {LED_G_GPIO_PORT->ODR ^= LED_G_GPIO_PIN;}
- #define LED_B_TOGGLE {LED_B_GPIO_PORT->ODR ^= LED_B_GPIO_PIN;}
- void LED_GPIO_Congig(void);
- #endif /* __BSP_LED_H*/
复制代码- //bsp_exti.c代码
- //bsp : board support package 板级支持包
- #include "bsp_exti.h"
- static void NVIC_Config(void)
- {
- NVIC_InitTypeDef NVIC_InitStruct;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1 );//需要先配置中断优先级分组
-
- NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;//配置中断源
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStruct);
-
- //配置按键2中断源
- NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
- NVIC_Init(&NVIC_InitStruct);
- }
- void EXTI_Key_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- EXTI_InitTypeDef EXTI_InitStruct;
-
- //配置中断优先级
- NVIC_Config();
-
- //开启时钟
- RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK | KEY2_INT_GPIO_CLK , ENABLE);
-
- /**************************KEY1配置********************/
- GPIO_InitStruct.GPIO_Pin = KEY1_INT_GPIO_PIN;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStruct);
-
- GPIO_EXTILineConfig( GPIO_PortSourceGPIOA, GPIO_PinSource0);//选择输入线 ,即选择EXTI的信号源
- EXTI_InitStruct.EXTI_Line = EXTI_Line0;
- EXTI_InitStruct.EXTI_LineCmd = ENABLE;
- EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;//上升沿触发
- EXTI_Init(&EXTI_InitStruct);
-
- /**************************KEY2配置********************/
- GPIO_InitStruct.GPIO_Pin = KEY2_INT_GPIO_PIN;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStruct);
-
- GPIO_EXTILineConfig( GPIO_PortSourceGPIOC, GPIO_PinSource13);//选择输入线,即选择EXTI的信号源
- EXTI_InitStruct.EXTI_Line = EXTI_Line13;
- EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
- EXTI_InitStruct.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStruct);
-
-
- }
复制代码- //bsp_exti.h代码
- #ifndef __BSP_EXTI_H
- #define __BSP_EXTI_H
- #include "stm32f10x.h"
- #define KEY1_INT_GPIO_PIN GPIO_Pin_0
- #define KEY1_INT_GPIO_PORT GPIOA
- #define KEY1_INT_GPIO_CLK (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)
- #define KEY2_INT_GPIO_PIN GPIO_Pin_13
- #define KEY2_INT_GPIO_PORT GPIOC
- #define KEY2_INT_GPIO_CLK (RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO)
- void EXTI_Key_Config(void);
- #endif /*__BSP_EXTI_H*/
复制代码- //main.c代码
- #include "stm32f10x.h"
- #include "bsp_led.h"
- #include "bsp_exti.h"
- void Delay(uint32_t count)
- {
- for(;count != 0;count--);
- }
- int main(void)
- {
- LED_GPIO_Congig();
- EXTI_Key_Config();
-
- while(1)
- {
- }
- }
复制代码- //stm32f10x_it.c代码。142行处添加
- void EXTI0_IRQHandler(void)
- {
- if( EXTI_GetITStatus( EXTI_Line0 != RESET))
- {
- LED_G_TOGGLE;
- }
- EXTI_ClearITPendingBit(EXTI_Line0);
- }
- void EXTI15_10_IRQHandler(void)
- {
- if( EXTI_GetITStatus( EXTI_Line13 != RESET))
- {
- LED_B_TOGGLE;
- }
- EXTI_ClearITPendingBit(EXTI_Line13);
- }
复制代码
|
|