网站首页 > 技术文章 正文
前几篇内容写到关于基于STM32F769I来车预警装置项目的硬件介绍,其中雷达模块,433Mhz模块和GPRS模块和STM32开发板都是使用串口进行通信,下面介绍下利用STM32CubeMX图像配置工具进行开发板串口配置。 STM32CubeMX是ST意法半导体近几年来大力推荐的STM32芯片图形化配置工具,允许用户使用图形化向导生成C初始化代码,可以大大减轻开发工作,时间和费用。STM32CubeMX几乎覆盖了STM32全系列芯片。它具有如下特性:① 直观的选择MCU型号,可指定系列、封装、外设数量等条件
② 微控制器图形化配置
③ 自动处理引脚冲突
④ 动态设置时钟树,生成系统时钟配置代码
⑤ 可以动态设置外围和中间件模式和初始化
⑥ 功耗预测
⑦ C代码工程生成器覆盖了STM32微控制器初始化编译软件,如IAR,KEIL,GCC。
⑧ 可以独立使用或者作为Eclipse插件使用
STM32CubeMX安装之前电脑必须安装JAVA运行环境安装,在Java官网www.java.com下载最新的Java软件安装即可
安装STM32CubeMX后启动软件:
点击New Project创建一个新的项目:
选择开发板的型号STM32F769NIHX,双击即可进入配置界面:
STM32F769I开发板的能引出的串口是UART6,我们就配置UART6
在Point选项里面选择UART6,第一个选项Mode用来设置串口6的模式或者关闭串口6。
第二个选项Hardware Flow Control(RS232)用来开启/关闭串口1的硬件流控制,该选项只有在
Mode选项值为Asynchronous(异步通信)模式的前提下才有效。这里我们要开启串口1的异步模
式,并且不使用硬件流控制,所以这里我们直接选择Mode值为Asynchronous即可。
使能串口后,在芯片位置可以看到串口6管脚已经变成绿色的,代表我们可以使用它
点击USART6配置按钮,进入USART6详细参数配置界面。在弹出的USART6
Configuration界面会出现5个配置选项卡。
Parameter Settings选项卡用来配置USART6的初始化参数,包括波特率停止位等等。这里
我们将USART6配置为:波特率115200,8位字长模式,无奇偶校验位,1个停止位,发送/
接收均开启。
User Constants是用来配置用户常量。
NVIC选项卡用来使能USART6中断。这里我们勾上Enabled选项。
DMA Setting是在使用USART6 DMA的情况才需要配置,这里我们不配置。
GPIO Setting便是查看和配置USART6相关的IO口,从图中可以看出UART6TXD和RXD对应的GPIO管脚为PG9和PG14.
配置完USART6相关IO口和USART6参数之后,如果我们使用到串口中断,那么我们还
需要设置中断优先级分组。接下来便是配置NVIC相关参数。同样的方法,进入Conguration
选项卡,点击NVIC按钮,配置UART6的中断优先级。
配置完后点击菜单Project->Generate Code即可生成源码
生成源码打开KEIL5后,我们会发现在程序里已经为我们添加好了初始化串口6的代码了
static void MX_USART6_UART_Init(void)
{
huart6.Instance = USART6;
huart6.Init.BaudRate = 115200;
huart6.Init.WordLength = UART_WORDLENGTH_7B;
huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_NONE;
huart6.Init.Mode = UART_MODE_TX_RX;
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart6.Init.OverSampling = UART_OVERSAMPLING_16;
huart6.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart6.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart6) != HAL_OK)
{
Error_Handler();
}
}
同时在stm32f4xx_hal_msp.c中,生成了串口MSP函数HAL_UART_MspInit内容如下,即初始化UART6对应的管脚。
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(huart->Instance==USART6)
{
/* USER CODE BEGIN USART6_MspInit 0 */
/* USER CODE END USART6_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_USART6_CLK_ENABLE();
/**USART6 GPIO Configuration
PG14 ------> USART6_TX
PG9 ------> USART6_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_USART6;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/* USER CODE BEGIN USART6_MspInit 1 */
/* USER CODE END USART6_MspInit 1 */
}
}
在串口中断中程序中编写相应串口处理雷达数据的代码即可。
//串口1中断服务程序
void USART6_IRQHandler(void)
{
u8 Res;
if((__HAL_UART_GET_FLAG(&UART6_Handler,UART_FLAG_RXNE)!=RESET))
//接收中断(雷达数据正好是以0x0d 0x0a结尾)
{
HAL_UART_Receive(&UART1_Handler,&Res,1,1000);
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
//接收数据错误,重新开始接收
}
}
}
}
HAL_UART_IRQHandler(&UART6_Handler);
}
以上图文内容均是EEWORLD论坛网友:beyondvv 原创,在此感谢。
欢迎微博@EEWORLD
如果你也写过此类原创干货请关注微信公众号:EEWORLD(电子工程世界)回复“投稿”,也可将你的原创发至:bbs_service@eeworld.com.cn,一经入选,我们将帮你登上头条!
与更多行业内网友进行交流请登陆EEWORLD论坛。
- 上一篇: stm32串口编程实例-实现数据的收发功能
- 下一篇: stm32使用USART实现一个串口通信应用
猜你喜欢
- 2024-10-12 STM32单片机-多串口printf()问题与ASCII码解析
- 2024-10-12 stm32F0 串口的几个特殊功能 stm32f1串口引脚
- 2024-10-12 STM32串口发送用哪个中断? stm32f4串口发送数据
- 2024-10-12 STM32F103编程学习——USB虚拟串口篇
- 2024-10-12 STM32F4入坑日记——串口发送数据(非中断)
- 2024-10-12 STM32 HAL库串口中断发送过程 stm32f4串口中断
- 2024-10-12 在货物监控设备研发时,STM32串口第一个字节丢失解怎么解决?
- 2024-10-12 STM32单片机采用环形缓冲区实现串口中断数据接收管理
- 2024-10-12 基于STM32的串口与DMA的完美组合(上)
- 2024-10-12 STM32下载程序新思路--使用串口下载STM32程序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)