学习做ppt 的网站,网站设计深圳哪家强?,做酒水网站有哪些,外贸自主建站平台目录
1、硬件及工程
2、实现方法
#xff08;1#xff09;修改while(1)中的代码#xff1a;
#xff08;2#xff09;修改2
#xff08;3#xff09;修改3
#xff08;4#xff09;修改4
#xff08;5#xff09;修改5
3、下载并运行 在本文作者的文章中1修改while(1)中的代码
2修改2
3修改3
4修改4
5修改5
3、下载并运行 在本文作者的文章中细说ARM MCU的串口发送数据的实现过程-CSDN博客 https://wenchm.blog.csdn.net/article/details/139598451 串口每接收到1字节的数据就调用一次回调函数。实际上可以通过修改参数在接收了一定长度的数据之后再调用回调函数。下面尝试当串口接收到3字节数据后再调用一次回调函数。
1、硬件及工程 文章依赖的硬件及工程配置同本文作者的其他文章细说ARM MCU的串口接收数据的实现过程-CSDN博客 https://wenchm.blog.csdn.net/article/details/139541112
2、实现方法 为此需要将HAL_UART_Receive_IT()函数中的Size参数设置为3也就是把在main.h中声明的RXBUFFERSIZE修改为3可以直接在main.h中修改。 假如串口助手向MCU一次发送3字节的数据其中第二个字节的数据是有意义的而前后两个字节是编码作为帧头和帧尾可以任意设置此处分别用字符“S”和“E”来表示它们在ASC Ⅱ码表中对应的十六进制数分别为0x53和0x45。当MCU通过串口接收到3字节的数后可以首先判断帧头和帧尾是否正确如果正确再进行下一步的处理。
1修改while(1)中的代码
while(1)
{/*USERCODE BEGIN 3 */if((RxBuffer[0] 0x53)(RxBuffer[2] 0x45)(CommFlag 1)){CommFlag 0;if(RxBuffer[1]0x10){HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);HAL_UART_Transmit_IT(huart2,CommOkMessage,19);}else{HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);HAL_UART_Transmit_IT(huart2,CommErrMessage,22);}}
}
/*USER CODE END 3 */ 例子中实现了用中断方式接收串口数据并通过回调函数一次性处理串口接收的多字节数据此外还使用中断和非中断方式实现了串口数据发送。
2修改2
/* USER CODE BEGIN PV */
uint8_t CommOkMessage[]Everything is OK\r\n;
uint8_t CommErrMessage[]Received ErrorData\r\n;
uint8_t CommFlag 0;
uint8_t RxBuffer[RXBUFFERSIZE]{0};
/* USER CODE END PV */
3修改3
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{CommFlag 1;HAL_UART_Receive_IT(huart2,(uint8_t *)RxBuffer,RXBUFFERSIZE);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{HAL_GPIO_WritePin(BUZ_GPIO_Port,BUZ_Pin,GPIO_PIN_RESET);HAL_Delay(100); //延时HAL_GPIO_WritePin(BUZ_GPIO_Port,BUZ_Pin,GPIO_PIN_SET);
}
/* USER CODE END 4 */
4修改4
/* Private defines -----------------------------------------------------------*/
#define KEY_Pin GPIO_PIN_13
#define KEY_GPIO_Port GPIOC
#define KEY_EXTI_IRQn EXTI15_10_IRQn
#define BUZ_Pin GPIO_PIN_4
#define BUZ_GPIO_Port GPIOA
#define LEDF_Pin GPIO_PIN_5
#define LEDF_GPIO_Port GPIOA
#define RXBUFFERSIZE 3 //接收缓冲区的长度
5修改5 /* USER CODE BEGIN 2 */HAL_UART_Receive_IT(huart2,(uint8_t*)RxBuffer,RXBUFFERSIZE);/* USER CODE END 2 */
3、下载并运行 通过串口助手先发送3次53 10 45应该收到3次数据正确的提示再发送3次53 20 45应该收到3次数据错误的提示。