目录
- 1. 配置
- 1.1 Pin脚
- 1.2 RCC开启外部晶振
- 1.3 时钟
- 1.4 串口配置
- 2. 代码
- 2.1 默认生成代码
- 2.1 开启串口中断函数
- 2.3 接收中断
- 2.4 接收回调函数
- 2.5 增加Printf 的使用
1. 配置
1.1 Pin脚
1.2 RCC开启外部晶振
1.3 时钟
外部使用8MHz晶振
开启内部16MHz晶振
使用锁相环
开启最高100MHz。
1.4 串口配置
串口1/2配置相同
2. 代码
2.1 默认生成代码
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
2.1 开启串口中断函数
添加在串口初始化之后
uint8_t aRxBuffer_1[1200]; //接收数据保存数组
HAL_UART_Receive_IT(&huart1,aRxBuffer_1,1); // Enable the USART1 Interrupt
2.3 接收中断
在stm32f4xx_it.c中
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
2.4 接收回调函数
这个部分需要自己编辑
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1) // 判断串口号
{
HAL_UART_Transmit(&huart1,aRxBuffer1,1,100); // 返回数据
HAL_UART_Receive_IT(&huart1,aRxBuffer1,1); // 使能串口1接收中断
}
if(huart->Instance == USART2) // 判断串口号
{
HAL_UART_Transmit(&huart2,aRxBuffer2,1,100); // 返回数据
HAL_UART_Receive_IT(&huart2,aRxBuffer2,1); // 使能串口1接收中断
}
}
2.5 增加Printf 的使用
在usart.c中,添加代码,同时添加引用头文件,接下来 printf 即可使用,使用 printf 的地方,同样需要引用头文件
#include <stdio.h>
/* USER CODE BEGIN 1 */
int fputc(int ch, FILE *f)//printf
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1,0xffff); //
return (ch);
}
/* USER CODE END 1 */
/* USER CODE BEGIN 0 */
#include <stdio.h>
/* USER CODE END 0 */