目录
- [1. 配置](#1. 配置)
-
- [1.1 Pin脚](#1.1 Pin脚)
- [1.2 RCC开启外部晶振](#1.2 RCC开启外部晶振)
- [1.3 时钟](#1.3 时钟)
- [1.4 串口配置](#1.4 串口配置)
- [2. 代码](#2. 代码)
-
- [2.1 默认生成代码](#2.1 默认生成代码)
- [2.1 开启串口中断函数](#2.1 开启串口中断函数)
- [2.3 接收中断](#2.3 接收中断)
- [2.4 接收回调函数](#2.4 接收回调函数)
- [2.5 增加Printf 的使用](#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 */