STM32CubeMx的串口配置流程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言`

本文主要记录了stm32CubeMx创建配置串口通信过程,包含了工程的创建、引脚的配置和串口的配置;所用mcu芯片型号为STM32F407VET6。实现的功能是串口助手和mcu的自发自收。


1.STM32CubeMx创建工程

打开File/New Project,弹出如下图页面,然后第一步搜索MCU型号芯片,第二步选择芯片型号,最后开始工程配置。

在这里插入图片描述

2.Pinout&Configuration配置

下来配置工程参数,首先配置RCC时钟源,HSR和LSE均选用外部的晶振/陶瓷模式,通常我们都使用的是此模式。

在这里插入图片描述
然后配置SYS(程序调试烧写方式),本文根据实验板的烧写接口,选用的JTAG(4 pin)。如图所示
在这里插入图片描述
进行串口功能的配置,以USART3为例,如图所示,选用Asynchronous(异步)模式,波特率设置9600Bit/s,字长8位,无奇偶校验位,1位停止位。
在这里插入图片描述
添加DMA功能的配置,如图所示,接收选用循环模式(circular),发送选用正常模式(normal),
在这里插入图片描述
在这里插入图片描述
最后进行串口的中断配置,如图所示:
在这里插入图片描述

3.ClockConfiguration配置

试验对象的外部晶振采用的是16MHz,具体时钟配置如下图所示。

在这里插入图片描述
然后配置SYS(程序调试烧写方式),本文根据实验板的烧写接口,选用的JTAG(4 pin)。如图所示

4.Project Manager配置

依次配置工程的名称、位置、应用结构、IDE环境和.c.h文件。如图所示:

在这里插入图片描述
在这里插入图片描述
最后,点击"GENERATE CODE",生成工程代码
在这里插入图片描述

5.生成代码修改

指示灯程序添加到main.c中:

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
		HAL_Delay(1000);
  }

串口程序修改内容主要到uart.c中,其中函数“BSP_USART3_Init”由main函数调用,功能主要初始化为空闲中断,配置DMA接收缓存;函数“BSP_USART3_IdleCallback”由USART3_IRQHandler函数调用,中断触发该功能,实现串口接收数据,并回调发送到上位机。

void BSP_USART3_Init(void)
{
	memset(Usart2.uc_RxBuffer,0x00,USART_DATA_SIZE);
	__HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE); 
	HAL_UART_Receive_DMA(&huart3,Usart3.uc_RxBuffer,USART_DATA_SIZE);
}
void BSP_USART3_IdleCallback(void)
{
    /*判断是否是空闲中断*/    
  //  if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE) != RESET)
		{
      if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE) != RESET)
			{ 
				/* Clean the input path */
				__HAL_UART_CLEAR_IDLEFLAG(&huart3);        
				__HAL_UART_FLUSH_DRREGISTER(&huart3);
				HAL_UART_DMAStop(&huart3); 
				/*获取接收数据长度*/
				uint8_t data_length = USART_DATA_SIZE- __HAL_DMA_GET_COUNTER(&hdma_usart3_rx);
				/*数据处理函数*/
				USART3_USER_Callback (Usart3.uc_RxBuffer , data_length);
				memset (Usart3.uc_RxBuffer ,0x00, data_length);
				HAL_UART_Receive_DMA(&huart3,Usart3.uc_RxBuffer,USART_DATA_SIZE);
			}
    }
}
void BSP_USART3_SendData(u8 *TxBuff,u16 BuffLen)
{
	HAL_UART_Transmit(&huart3, TxBuff,BuffLen,0xFFFF);
	while(HAL_UART_GetState(&huart3) == HAL_UART_STATE_BUSY_TX);    
}
void USART3_USER_Callback (u8 * RxBuff , u16 RxLenth)
{
	u32 baudvalue = 0;
	u8 baudlen =0;
	if(RxLenth > USART_DATA_SIZE) 
		return;
	else 
	{
		Uart3_Msg.us_DataLen = RxLenth;
		for( u16 i =0; i<RxLenth ;i++ )
		{
			Uart3_Msg.uc_RxBuffer [i] = *(RxBuff + i);
		} 
		BSP_USART3_SendData(Uart3_Msg.uc_RxBuffer,Uart3_Msg.us_DataLen);
	}
}
指示灯程序添加到main.c中:
while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
		HAL_Delay(1000);
  }

该处使用的url网络请求的数据。

总结

以上就是今天要讲的内容,本文主要介绍了cube配置串口流程,目的是熟悉cube创建程序的过程。本文档涉及软件代码工程可参考如下链接:
添加链接描述

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值