要实现发送数字1来点亮绿灯,发送数字2来关闭绿灯,发送数字3来翻转绿灯,你需要对给定的代码进行修改。以下是修改后的代码:

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();                     //初始化按键

    while(1)
    {
        if(USART_RX_STA & 0x8000)
        {					   
            len = USART_RX_STA & 0x3fff;   //得到此次接收到的数据长度
            printf("\r\n您发送的消息为: %s\r\n", 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("\r\n\r\n");   //插入换行

            // 判断接收到的数字并执行相应操作
            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("\r\nALIENTEK 阿波罗STM32F429开发板 串口实验\r\n");
                printf("正点原子@ALIENTEK\r\n\r\n\r\n");
            }
            if(times % 200 == 0) printf("请输入数据,以回车键结束\r\n");  
            if(times % 30 == 0) LED0 = !LED0;   // 闪烁LED,提示系统正在运行.
            delay_ms(10);   
        } 
    } 
}

在这个修改后的代码中,我添加了对接收到的数据进行判断的逻辑。根据接收到的数据进行相应的操作:发送数字1时点亮绿灯,发送数字2时关闭绿灯,发送数字3时翻转绿灯。你可以根据这个代码来实现你的需求。记得将修改后的代码下载到阿波罗STM32F429开发板上进行测试。

STM32F429开发板串口控制LED灯:数字1点亮,数字2关闭,数字3翻转

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

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