STM32F429开发板串口控制LED灯:数字1点亮,数字2关闭,数字3翻转
要实现发送数字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开发板上进行测试。
原文地址: https://www.cveoy.top/t/topic/N5k 著作权归作者所有。请勿转载和采集!