CubeMX的配置(先讲阻塞,后讲中断)
阻塞
首先是CubeMX中配置RCC
配置时钟
配置串口1
点击PA9,PA10分别配置为USART1tx和USARt1rx
一般都是这样配置。波特率是115200;数据位是8位;没有奇偶校验位;一个停止位。这里的配置默认就好。
函数部分
/*利用这个函数可以使用C语言的printf函数。记得添加头文件#include <stdio.h>,#include <string.h>
记得打开Use MicroLIB(在魔法棒的Target里面有,把前面的勾勾打上就好了)*/
int fputc(int ch, FILE *f)
{
/* Your implementation of fputc(). */
unsigned char temp[1] = {ch};
HAL_UART_Transmit(&huart1, temp, 1, 0xffff);
return ch;
}
/*在while里面的串口接收和发送的部分*/
unsigned char ch[20] = {0};//串口接收数组
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_UART_Receive(&huart1, ch, 19, 100);//串口接收函数
//HAL_UART_Transmit(&huart1, ch, strlen(ch), 100);//串口发送函数
printf(ch);
memset(ch, 0, strlen(ch));//清空数组中的数据
}
中断
前面的操作都一样,唯一不一样的是要打开中断,如下图所示
大概得流程是这样的
收到中断
-->中断处理函数USART1_IRQHandler
-->HAL_UART_IRQHandler
-->接收中断处理UART_Receive_IT
-->接收完成回调函数HAL_UART_RxCpltCallback