还是接着上一个实例来。因为我想找到FREERTOS实战中的真谛。
上一个STM32CUBEMX的工程也再,我点开就是了。
把USART2的串口中断打开:
然后点生成代码,直接用MDK打开生成的工程。
发现STM32L4xx_it.c中多了:
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] This function handles USART2 global interrupt.
*/
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
/* USER CODE END USART2_IRQn 1 */
}
我没有管而是去查了一下资料,因为HAL向来强调中断时间得短,搞个带__WEAK的回调函数来处理。
于是我就是主程序里加上这个回调函数:
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit(&huart2, uart2_rxbuf, 1, 100); // 把收到的字节原样发送出去
HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 1); // 重新注册一次,要不然下次收不到了
}
/* USER CODE END 4 */
再在主函数前面加个数组声明:
/* USER CODE BEGIN PD */
uint8_t uart2_rxbuf[10];
/* USER CODE END PD */
而声明接收几个数据在USART2的初始化后边加上:
/* USER CODE BEGIN USART2_Init 2 */
HAL_UART_Receive_IT(&huart2, uart2_rxbuf, 8);
/* USER CODE END USART2_Init 2 */
那么下载后运行如下:
我发送8个字符十六进制,也收到了十六进制。
然后我碰到个怪事。就是我变成ASC接收模式,我发的东东是小方块,可是我无论怎么按发射也打断不了FREERTOS发的东东。
想不明白这是怎么回事,截图如下:
这个我得好好想想,想也想不通。。。。。。。欲知想通了没能且听下回分解吧。