用模块化方法重新完成EXP_USART1_Receive_IT_LED __简明指导文件
编程实现模块化设计,串口发送十六进制数字,控制LED灯亮相应秒数。例如,串口发送0x02,LED亮2秒。
(1) 配置SYS、外部晶振、时钟、gpio(PC12标签为“LED”)
(2) 配置USART1
配置UART1串口通信参数
配置UART1串口中断
配置中断优先级
(3) 设置生成代码文件方式并生成代码
generated files中勾选第一项“Generate peripheral initialization as a pair of ‘.c/h’ files per peripgheral”
配置代码生成模式
(4) 在固定位置添加程序
1> main.c
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_UART_Receive_IT(&huart1,RxBuffer,1);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(Rx_flag==1)
{
Rx_flag=0;
LED_light_delay(RxBuffer[0]);
}
}
/* USER CODE END 3 */
}
2> g
/* USER CODE BEGIN 2 */
void LED_light_delay(uint8_t time)
{
HAL_GPIO_WritePin (LED_GPIO_Port ,LED_Pin, GPIO_PIN_RESET);
HAL_Delay (time*1000);
HAL_GPIO_WritePin (LED_GPIO_Port ,LED_Pin, GPIO_PIN_SET);
}
/* USER CODE END 2 */
3> g
/* USER CODE BEGIN Prototypes */
void LED_light_delay(uint8_t time);
/* USER CODE END Prototypes */
4> u
/* USER CODE BEGIN 0 */
uint8_t RxBuffer[1];
uint8_t Rx_flag;
/* USER CODE END 0 */
/* USER CODE BEGIN 1 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(UartHandle->Instance == USART1) //首先判断是否是USART1的中断
{
Rx_flag=1;
HAL_UART_Receive_IT(&huart1,RxBuffer,1); //启动下一次接收
}
}
/* USER CODE END 1 */
5> u
/* USER CODE BEGIN Private defines */
extern uint8_t RxBuffer[1];
extern uint8_t Rx_flag;
/* USER CODE END Private defines */
/* USER CODE BEGIN Prototypes */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle);
/* USER CODE END Prototypes */
运行结果:
可观察到,通过发送相应数字,LED对应亮起相应秒数。
**注意串口发送时发送16进制数字