不错啊!!继续关注
外部中断的实验
循着正点的《STM32不完全手册》蹒跚前行,实验4 的外部中断实验,涉及到:3个按键(2个定义口不同),4个LED灯(原2个,扩到4个,定义口不同),中断(源、线、程序)。
按键的触发作为中断源,2个LED的变化,是对中断的响应,2个LED作为工作状态指示。
按键的预定义及初始程序
#define KEY0 PFin(11) //PF11 USER BUTTER
#define KEY1 PCin(13) //PC13 Anti-Tamper
#define KEY2 PAin(0) //PA0 WAKE_UP
初始程序#define KEY0 PFin(11) //PF11 USER BUTTER
#define KEY1 PCin(13) //PC13 Anti-Tamper
#define KEY2 PAin(0) //PA0 WAKE_UP
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<4; //使能PORTc时钟
RCC->APB2ENR|=1<<7; //使能PORTf时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入
GPIOF->CRH|=0X00008000;
GPIOF->ODR|=1<<11 ;
GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入
GPIOC->CRH|=0X00800000;
GPIOC->ODR|=1<<13 ;
}
//LED端口定义
#define LED0 PEout(4)// PE4 RED LED (LD5)
#define LED1 PEout(5)// PE5 GREEN LED (LD6)
#define LED2 PEout(2)// PE2 RED LED (LD3)
#define LED3 PEout(3)// PE3 RED LED (LD4)
//LED初始程序
void LED_Init(void)
{
RCC->APB2ENR|=1<<6; //使能PORTE时钟
GPIOE->CRL&=0XFF0000FF;
GPIOE->CRL|=0X00333300;//PE2~5推挽输出
GPIOE->ODR|=0X003c; //PE2~5输出高
}
//中断初始程序
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<4; //使能PORTC时钟 //
RCC->APB2ENR|=1<<7; //使能PORTF时钟 //
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
// GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
// GPIOA->CRH|=0X80800000;
// GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
// GPIOA->ODR|=1<<15; //PA15上拉
GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入
GPIOF->CRH|=0X00008000;
GPIOF->ODR|=1<<11 ;
GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入
GPIOC->CRH|=0X00800000;
GPIOC->ODR|=1<<13 ;
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_F,11,FTIR);//下降沿触发 //
Ex_NVIC_Config(GPIO_C,13,FTIR);//下降沿触发 //
// Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发 //
// Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发 //
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2
}
被注解的,是原有的语句,为学习对比,仍保留着
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,115200); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
EXTIX_Init(); //外部中断初始化
LED3=0; //led test
while(1)
{
printf("OK\n");
delay_ms(1000);
LED2=!LED2 ; //闪
LED3=!LED3;
}
}
主程序,只增加了2个LED闪动,交替的闪动,说明运行在主程序的循环里,否则,哈,找原因去吧。(曾利用这点,找到了中断程序中问题:未正确清除中断标志位,而一直处在中断状态,无暇去闪动LED)
JACKWANG帮在EEPW视频平台发布了2段视频:
“sacq”的STM32运行uCGUI演示的视频片段1
"sacq"的STM32运行uCGUI演示的视频片段2
或 http://forum.eepw.com.cn/thread/210625/4#35
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
我要赚赏金打赏帖 |
|
|---|---|
| Chaos-nano:专为低资源单片机设计的轻量级协作式异步操作系统(ATMEGA328P轻量级操作系统)—— 详细介绍被打赏¥16元 | |
| FPGA配置被打赏¥10元 | |
| Chaos-nano协作式异步操作系统:赋能MicrochipAVR8位单片机的革新之路被打赏¥15元 | |
| 基于esp32开发时串口工具的注意点被打赏¥24元 | |
| 基于FireBeetle2ESP32-C5开发板的舵机控制被打赏¥20元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板制作的电子相册被打赏¥32元 | |
| 基于FireBeetle2ESP32-C5开发板的超声波测距及显示被打赏¥21元 | |
| FireBeetle2ESP32-C5上RTC电子时钟的实现被打赏¥25元 | |
| 【分享开发笔记,赚取电动螺丝刀】MAX78000开发板读取SD卡被打赏¥23元 | |
| 【S32K3XX】Standby RAM 重启后数据异常问题调查被打赏¥38元 | |
我要赚赏金
