如题,我用的是STM32CUBEMX和STM32F103ZET6进行的串口开发,想要实现的效果是复位可以用串口调试助手接收到“hello world!”当发送“0xa1”,串口调试助手可以接收到"LED1 Open!“
当发送“0xa2”,串口调试助手可以接收到"LED1 Closed!“
但是有一个小问题,只能用串口调试助手发送一次,可以接收到返回值。后面再发送就接收不到返回的值了。
#define LED1_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET)
#define LED1_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET)
#define LED2_ON() HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET)
#define LED2_OFF() HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET)
uint8_t Tx_str1[] = "hello world!\r\n";
uint8_t Tx_str2[] = "LED1 Open!\r\n";
uint8_t Tx_str3[] = "LED1 Closed!\r\n";
uint8_t Rx_dat = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
if(Rx_dat == 0xa1)
{
LED1_ON();
LED2_ON();
HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000);
LED2_OFF();
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
else if(Rx_dat == 0xa2)
{
LED1_OFF();
LED2_ON();
HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000);
LED2_OFF();
HAL_UART_Receive_IT(&huart1,&Rx_dat,1);
}
}
}
//在mian()函数中添加以下代码:
LED2_ON();
HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000); //向上位机发送“hello world!”
LED2_OFF();
HAL_UART_Receive_IT(&huart1,&Rx_dat,1); //启动串口1接收上位机1个字节
|