STM32F429 开发板串口实验:接收数据控制LED
#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。请根据你的具体情况进行适当的调整和测试。 */
原文地址: https://www.cveoy.top/t/topic/OgW 著作权归作者所有。请勿转载和采集!