STM32CubeMX方面设置
进去时默认都要先配置RCC和SYS的设置,接口方面的设置由于使用到了USART,因此无需在图形化界面进行接口设置,直接在左边的connectivity标签中直接对USART1进行设置设置,把运行模式调成异步模式即可,其他没有特别需求不需要调整
随后调整好文件生成位置生成项目即可
main.c
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t IsOver = 0;
uint8_t buffer[100];
uint16_t size;
/* USER CODE END 0 */ /* USER CODE BEGIN 2 */
// 发送一个字符串
HAL_UART_Transmit(&huart1, "hello, world!\n", 14, 1000);
/* USER CODE END 2 */ /* USER CODE BEGIN WHILE */
while (1)
{
// 以中断方式进行接收
HAL_UARTEx_ReceiveToIdle_IT(&huart1, buffer, 100);
if (IsOver)
{
HAL_UART_Transmit(&huart1, buffer, size, 1000);
IsOver = 0;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}stm32f1xx_it.c
/* USER CODE BEGIN 1 */
extern uint8_t IsOver;
extern uint16_t size;
// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
// {
// IsOver = 1;
// }
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
IsOver = 1;
size = Size;
}
/* USER CODE END 1 */(+) Non-Blocking mode: The reception is performed using Interrupts or DMA.
These API's return the HAL status.
The end of the data processing will be indicated through the
dedicated UART IRQ when using Interrupt mode or the DMA IRQ when using DMA mode.
The HAL_UARTEx_RxEventCallback() user callback will be executed during Receive process
The HAL_UART_ErrorCallback()user callback will be executed when a reception error is detected.
(#) Non-Blocking mode API with Interrupt:
(+) HAL_UARTEx_ReceiveToIdle_IT()
第一种void HAL_UART_RxCpltCallback中断服务使用在已经知道接收数据长度的情况下,泛用性不高
第二种void HAL_UARTEx_RxEventCallback中断服务使用在不知道接收数据长的的情况下,由上述文档解释可知这个中断服务和前一个中断服务触发条件相同,都由HAL_UARTEx_ReceiveToIdle_IT来出发该中断服务