STM32CubeMX学习笔记——STM32H743串口

STM32CubeMX学习笔记——STM32H743串口

  • Github
  • STM32CubeMX配置
    • Pinout配置
    • Clock Configuration配置
    • Configuration
      • USART
      • NVIC
  • 代码部分
    • main.c
    • stm32h7xx_it.c

Github

https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/STM32H7/Class02_USART

STM32CubeMX配置

STM32CubeMX版本:4.27.0
配置流程:
Pinout界面选择并开启串口外设
Clock Configuration配置时钟树
Configuration界面配置Connectivity与System
生成工程

Pinout配置

STM32CubeMX学习笔记——STM32H743串口_第1张图片
该界面用于配置串口与映射引脚

Clock Configuration配置

STM32CubeMX学习笔记——STM32H743串口_第2张图片
用于配置系统时钟与外设的时钟

Configuration

STM32CubeMX学习笔记——STM32H743串口_第3张图片
左侧主要系统功能的开启,或中间软件层功能的开启(如:RTOS、JPEG解码器,文件系统等)
右侧是系统及外设模块的具体配置

USART

STM32CubeMX学习笔记——STM32H743串口_第4张图片
主要配置波特率、停止位、校验位(注:波特率的可选范围与其时钟频率相关)
STM32CubeMX学习笔记——STM32H743串口_第5张图片
是否开启中断
STM32CubeMX学习笔记——STM32H743串口_第6张图片
映射的IO配置

NVIC

STM32CubeMX学习笔记——STM32H743串口_第7张图片
设置串口的中断向量组、中断的抢占优先级、子优先级
STM32CubeMX学习笔记——STM32H743串口_第8张图片
生成USART1的中断代码

代码部分

中断响应流程:

//stm32h7xx_it.c
void USART1_IRQHandler(void) 
//stm32h7xx_hal_uart.c
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
//stm32h7xx_hal_uart.c
static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)
//stm32h7xx_hal_msp.c
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

main.c

每次需要执行

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

函数才能正常产生RX中断。并且每次接收到uint16_t Size个字节后会自动关闭。需要重新执行此函数

/* USER CODE BEGIN 0 */
unsigned char buffer[1024*10];
/* USER CODE END 0 */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart1, buffer, 1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	HAL_Delay(200);
	HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
	if(huart1.RxState == HAL_UART_STATE_READY)
		HAL_UART_Receive_IT(&huart1, buffer, 1);

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

stm32h7xx_it.c

/* USER CODE BEGIN 0 */
extern unsigned char buffer[];
/* USER CODE END 0 */
/* USER CODE BEGIN 1 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit(huart,buffer,huart->RxXferSize,1000);
}
/* USER CODE END 1 */

你可能感兴趣的:(STM32CubeMX学习笔记——STM32H743串口)