提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言`
- 1.STM32CubeMx创建工程
- 2.Pinout&Configuration配置
- 3.ClockConfiguration配置
- 4.Project Manager配置
- 5.生成代码修改
- 总结
前言`
本文主要记录了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创建程序的过程。