串口
/* USER CODE BEGIN PV */
//PA9--TX PA10--RX6
//定义变量
uint8_t temp;//接收数据
uint8_t RxFlag = 2; //0收到`*`,1表示收到`#`
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
//使能接收中断
HAL_UART_Receive_IT(&huart1, &temp, 1);
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
if(RxFlag==0){//接收到'*'
HAL_GPIO_WritePin(GPIOC,LED_Pin,GPIO_PIN_SET);//熄灭
HAL_UART_Transmit(&huart1, (uint8_t *)"hello ****!\r\n", 16, 0xff);
}
if(RxFlag==1){//接收到'#'
HAL_GPIO_WritePin(GPIOC,LED_Pin,GPIO_PIN_RESET);//点亮
HAL_UART_Transmit(&huart1, (uint8_t *)"hello ####!\r\n", 16, 0xff);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 4 */
//中断接受回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance == USART1 && temp == '#'){
RxFlag = 1;
}else if (huart->Instance == USART1 && temp == '*'){
RxFlag = 0;
}else if (huart->Instance == USART1 && temp == '!'){
RxFlag = 2;
}
HAL_UART_Receive_IT(&huart1, &temp, 1);
}
/* USER CODE END 4 */
接收到字符保存到数组
/* USER CODE BEGIN PV */
//PA9--TX PA10--RX6
//定义变量
uint8_t temp;//接收数据 一次接受一个字符
uint8_t arr[20];//存放数据
uint8_t num=0;//接收到的字符个数
uint8_t flag = 0; //1接收开始 2接收结束
uint8_t while_flag = 0; //while循环中使用的标志位
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
//使能接收中断
HAL_UART_Receive_IT(&huart1, &temp, 1);
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
if(while_flag == 1){
HAL_UART_Transmit(&huart1, (uint8_t *)"hello while!\r\n", 16, 0xff);
while_flag = 0;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 4 */
//中断接受回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
if(huart->Instance == USART1 && temp == '*'){ //接收到*字符 标志置1 开始放入到数组
flag = 1;
}
if(huart->Instance == USART1 && temp == '#'){ //接收到#字符 标志置2 停止放入数组
flag = 2;
}
if(flag == 1){ //*字符 包括后面的字符放入到数组 直至#字符到来
arr[num] = temp;
num++;
}
if(flag == 2){//#字符 到来 将#放入数组 发送回去 数组清零 标志位清0 接收字符个数清0
arr[num] = temp; //arr数据的格式 *字符# 接收*开头#结尾的数据 包括*和#
num = 0;
flag = 0;
if(1){ //比较接收到的数据arr与自定义数据
while_flag = 1;//while循环中使用的标志位
}
HAL_UART_Transmit(&huart1, (uint8_t *)arr, 20, 0xff);
for(uint8_t i = 0;i<20;i++){
arr[i] = 0;
}
}
HAL_UART_Receive_IT(&huart1, &temp, 1);
}
/* USER CODE END 4 */
10-15
3647
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-22
1950
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)