#include 'stm32f4xx_hal.h' #include 'stdio.h' #include 'string.h'

// 定义LED引脚 #define LED0 PAout(0)

// 函数声明 void EXTI_Init(void); // 外部中断初始化函数

// 外部中断0中断处理函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // 处理外部中断0

// 在按键中断中进行LED的翻转操作
LED0 = !LED0;

}

int main(void) { u8 len; u16 times = 0; HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz delay_init(180); //初始化延时函数 uart_init(115200); //初始化USART LED_Init(); //初始化LED KEY_Init(); //初始化按键 EXTI_Init(); //初始化外部中断

while(1)
{
    if(USART_RX_STA & 0x8000)
    {					   
        len = USART_RX_STA & 0x3fff;   //得到此次接收到的数据长度
        printf('

您发送的消息为: %s ', USART_RX_BUF); HAL_UART_Transmit(&UART1_Handler, (uint8_t*)USART_RX_BUF, len, 1000); //发送接收到的数据 while(__HAL_UART_GET_FLAG(&UART1_Handler, UART_FLAG_TC) != SET); //等待发送结束 printf('

'); //插入换行

        // 判断接收到的数字并执行相应操作
        if (USART_RX_BUF[0] == '1')
        {
            LED0 = 1;   // 点亮绿灯
        }
        else if (USART_RX_BUF[0] == '2')
        {
            LED0 = 0;   // 关闭绿灯
        }
        else if (USART_RX_BUF[0] == '3')
        {
            LED0 = !LED0;   // 翻转绿灯
        }

        USART_RX_STA = 0;
    }
    else
    {
        times++;
        if(times % 5000 == 0)
        {
            printf('

ALIENTEK 阿波罗STM32F429开发板 串口实验 '); printf('正点原子@ALIENTEK

'); } if(times % 200 == 0) printf('请输入数据,以回车键结束 ');
if(times % 30 == 0) LED0 = !LED0; // 闪烁LED,提示系统正在运行. delay_ms(10);
} } }

// 外部中断初始化函数 void EXTI_Init(void) { GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOA_CLK_ENABLE();    // 使能GPIOA时钟

// 配置PA0引脚作为输入,用于外部中断
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;    // 下降沿触发
GPIO_InitStruct.Pull = GPIO_PULLUP;    // 上拉
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置外部中断优先级
HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);

}

// 外部中断0中断处理函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // 处理外部中断0

// 在按键中断中进行LED的翻转操作
LED0 = !LED0;

}

/* 请注意,以上代码仅为示例代码,可能需要根据你的具体硬件环境和需求进行适当的修改。为了使代码能够正确运行,可能还需要根据你的具体情况进行适当的头文件包含和引脚配置。同时,确保你的开发板支持外部中断,并正确连接按键和LED。请根据你的具体情况进行适当的调整和测试。 */

STM32F429 开发板串口实验:接收数据控制LED

原文地址: https://www.cveoy.top/t/topic/OgW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录