STM32F429HAL库UART学习笔记

UART串口通讯作为最基本通讯协议我就不多赘述。我主要用HAL库实现串口通讯,看一下配置Uart的结构一变量

 这里使用了结构体嵌套


typedef struct
{
  USART_TypeDef                 *Instance;         串口类型和串口内部控制寄存器结构体
  
  UART_InitTypeDef              Init;              定义串口输出数据类型停止位奇偶校验位的结构体
  
  uint8_t                       *pTxBuffPtr;      要发送的数据的缓冲数组指针
  
  uint16_t                      TxXferSize;     要发送数组大小
  
  uint16_t                      TxXferCount;    发送的个数
  
  uint8_t                       *pRxBuffPtr;     接受数据数组缓冲指针
  
  uint16_t                      RxXferSize;      接受数组大小
  
  uint16_t                      RxXferCount;    数组个数
  
  DMA_HandleTypeDef             *hdmatx;         发送的DMA配置结构体
    
  DMA_HandleTypeDef             *hdmarx;         接受的DMA配置结构体
  
  HAL_LockTypeDef               Lock;            判断数据加锁若加锁返回忙,若没加锁配置


  __IO HAL_UART_StateTypeDef    State;          UART状态位 
  
  __IO uint32_t                 ErrorCode;        判断错误类型  以上三个变量都是HAL调用用户基本用不到


}UART_HandleTypeDef;

原子哥的配置函数如下,定义串口1 波特率115200,修改就很简单了

 void uart1_init()
{
usart1_handler.Instance=USART1;
usart1_handler.Init.BaudRate=115200;   //波特率
usart1_handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
usart1_handler.Init.StopBits=UART_STOPBITS_1;   //一个停止位
usart1_handler.Init.Parity=UART_PARITY_NONE;   //无奇偶校验位
usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
usart1_handler.Init.Mode=UART_MODE_TX_RX;   //收发模式
HAL_UART_Init(&usart1_handler);   //HAL_UART_Init()会使能UART1
 
}


再说一下GPIO配置HAL 开了一个配置头,里面什么都没有我们用到还是要自己配置

这里他们用了_weak 和 unused()这连个语法我是这样理解的,——weak就是让给用户一个编程头免去取名字的烦恼脑,UNUESD的作用就是防止编译器warring警告变量没有使用

看一下GPIO口配置模式比F1多了好几个数据手册还说多了锁存功能其实没什么用

#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\浮空输入
                            ((MODE) == GPIO_MODE_OUTPUT_PP)          ||\ 推挽输出
                            ((MODE) == GPIO_MODE_OUTPUT_OD)          ||\开漏输出
                            ((MODE) == GPIO_MODE_AF_PP)              ||复用推挽输出
                            ((MODE) == GPIO_MODE_AF_OD)             ||\复用开漏输出
                            ((MODE) == GPIO_MODE_IT_RISING)       ||\外部触发上升沿触发
                            ((MODE) == GPIO_MODE_IT_FALLING)         ||\外部触发下降沿触发
                            ((MODE) == GPIO_MODE_IT_RISING_FALLING)  ||\外部触发
                            ((MODE) == GPIO_MODE_EVT_RISING)         ||\   事件管脚复用具体怎么用网上帖子很少目前不深究

                            ((MODE) == GPIO_MODE_EVT_FALLING)        ||\
                            ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\
                            ((MODE) == GPIO_MODE_ANALOG))   模拟输入



void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
   
GPIO_InitTypeDef GPIO_Initure;

if(huart->Instance==USART1)//如果是串口1,进行串口1 MSP初始化
{
__HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE();//使能USART1时钟

GPIO_Initure.Pin=GPIO_PIN_9;//PA9
GPIO_Initure.Mode=GPIO_MODE_AF_PP;//复用推挽输出 只要使用到复用就直接设为复用管脚否则不工作
GPIO_Initure.Pull=GPIO_PULLUP;//上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
GPIO_Initure.Alternate=GPIO_AF7_USART1;//复用为USART1这里我困惑了很久 原来是只有F4以上的板子才要配置这个复用配置F1和F3都不需要配置,直接I/O配置时给AFPP就好了,这里也是对复用端口正规了一下


HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9


GPIO_Initure.Pin=GPIO_PIN_10;//PA10

HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10

HAL_NVIC_EnableIRQ(USART1_IRQn);        //使能USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3);//抢占优先级3,子优先级3
}
 
}

中断优先级我的理解就是 抢占 和 顺序优先级 强占优先级高无论现在有没有中断发生只要你发生你就开始中断,不管有的中断有没有开始或正在进行。顺序优先级的作用就是两个强占优先级相同的中断到来你顺序高你先执行你执行完才执行下一个中断。 

  接下来开始接受数据处理函数HAL库是给了在中断内部调用函数来处理中断的,接受用的是串口结构体句柄实现的

先使能接受中断,在接收中断服务函数中真正处理函数是下面这句话


HAL_UART_IRQHandler(&usart1_handler);

这个函数处理判断是什么中断和接受数据我们要自己编写一个回调函数在回调函数我们可以处理进行判断处理方法和F1板上的方法相同

串口通讯的功能就实现了


F4的内核是没有重映射这一说的只有复用功能查表也方便了很多呢


补充一下 使用到HAL 库的一些文件是

时钟配置RCC:stm32f429xx_hal_rcc.h

GPIO配置:stm32f429xx_hal_gpio.h   时钟复用配置:stm32f429xx_gpio_ex.h

UART配置:stm32f429xx_hal_uart.h 

程序中一些配置中断系统定义中断在 32f429xx.h(这个因你用的mcu的版本而定我用的是正点原子F429IGT)






  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!关于STM32F407HAL的教学,我可以为您提供一些基本信息和指导。 首先,STM32F407HAL是针对STMicroelectronics的STM32F407系列微控制器而开发的高级抽象层(HAL。它提供了一套易于使用的API,用于配置和控制STM32F407微控制器的各种外设功能。 要开始使用STM32F407HAL,您需要准备以下工具和资源: 1. STM32F407微控制器开发板:您可以选择使用官方的Discovery开发板或其他兼容的开发板。 2. STM32CubeMX:这是STMicroelectronics提供的一个图形化配置工具,用于生成基本的项目框架和初始化代码。 3. STM32Cube HAL:这是STM32F407HAL的核心部分,可以从STMicroelectronics的官方网站上下载。确保选择与您的微控制器型号相对应的版本。 4. 集成开发环境(IDE):您可以选择使用Keil MDK、IAR Embedded Workbench或者STM32CubeIDE等IDE来编写、编译和调试代码。 一旦您准备好了上述工具和资源,您可以按照以下步骤开始使用STM32F407HAL: 1. 使用STM32CubeMX创建一个新的工程,并选择适当的微控制器型号(例如STM32F407VG)。 2. 在配置选项中选择您需要的外设功能(如GPIO、UART、SPI等)并进行相应的配置。 3. 生成代码并导出到您选择的IDE中。 4. 打开IDE,编写您的应用程序代码,包括初始化和配置外设、处理中断、控制和读取外设等。 5. 编译代码并下载到STM32F407开发板上进行调试和测试。 除了上述步骤,您还可以参考官方的文档、示例代码和教程来学习更多关于STM32F407HAL的使用方法。STMicroelectronics的官方网站上提供了丰富的资源,包括参考手册、应用笔记和视频教程。 希望这些信息能够帮助您入门STM32F407HAL学习和使用。如有任何进一步的问题,请随时向我提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值