stm32f407关于串口配置的各种函数(一)(基于HAL库)

以下内容全部来自正点原子,本人只是对主要知识点进行整理,方便以后查看。

一、hal库初始化

 使用HAL库需要先初始化HAL库

HAL_Init();

二、串口配置相关函数和参数(hal库)

2.1串口使能

使用串口之前,需要先对串口时钟使能,对GPIOx口使能函数(x为具体串口,使用的时候要根据情况修改):

__HAL_RCC_GPIOx_CLK_ENABLE();

比如对F口使能就是:

__HAL_RCC_GPIOF_CLK_ENABLE();

2.2配置特定串口以及工作模式

hal库配置串口初始化的函数为:

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

形参 1 GPIO_TypeDef *GPIOx是端口号,配置哪个端口就使用哪个串口即可,比如配置F串口就写成:

void HAL_GPIO_Init(GPIOF, GPIO_InitTypeDef *GPIO_Init);

形参 2 GPIO_InitTypeDef *GPIO_InitGPIO_InitTypeDef 类型的结构体变量,其定义如下:

typedef struct
{
 uint32_t Pin; /* 引脚号 */
 uint32_t Mode; /* 模式设置 */
 uint32_t Pull; /* 上拉下拉设置 */
 uint32_t Speed; /* 速度设置 */
uint32_t Alternate; /* 复用功能 */
} GPIO_InitTypeDef;

 Pin 表示引脚号,范围:GPIO_PIN_0 到 GPIO_PIN_15,另外还有 GPIO_PIN_All 和 GPIO_PIN_MASK 可选。

 Mode 是 GPIO 的模式选择,有以下选择项:

代码功能
GPIO_MODE_INPUT输入模式
GPIO_MODE_OUTPUT_PP推挽输出
GPIO_MODE_OUTPUT_OD开漏输出
GPIO_MODE_AF_PP推挽式复用
GPIO_MODE_AF_INPUTGPIO_MODE_INPUT
GPIO_MODE_ANAOG模拟模式
GPIO_MODE_IT_RISING外部中断,上升沿触发检测
GPIO_MODE_IT_FALLING外部中断,下降沿触发检测
GPIO_MODE_IT_RISING_FALLING外部中断,上升和下降双沿触发检测
GPIO_MODE_EVT_RISING外部事件,上升沿触发检测
GPIO_MODE_EVT_FALLING外部事件,下降沿触发检测
GPIO_MODE_EVT_RISING_FALLING外部事件,上升和下降双沿触发检测

不同模式的具体介绍可以查看:(此处为占位符)

Pull 用于配置上下拉电阻,有以下选择项:

代码功能
GPIO_NOPULL无上下拉
GPIO_PULLUP上拉 
GPIO_PULLDOWN下拉

Speed 用于配置 GPIO 的速度,有以下选择项:

代码功能
GPIO_SPEED_FREQ_LOW低速
GPIO_SPEED_FREQ_MEDIUM中速
GPIO_SPEED_FREQ_HIGH高速

 Alternate 用于配置具体的复用功能,不同的 GPIO 口可以复用的功能不同,不使用串口的复用功能时直接不设置此参数即可

2.3串口高低电平设定函数

对串口进行高低电平写操作用函数

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin,GPIO_PinState PinState);

第一个参数为端口号,第二参数为引脚号,参数三有两个形式:

GPIO_PIN_SET   //表示高电平
GPIO_PIN_RESET   //表示低电平

比如想要对F端口的10引脚设定高电平就用代码:

HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);

对串口的进行高低电平反转操作用:

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

例子:

HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);

三、练习

假设在stm32的F端口的10引脚接有一个LED,当引脚输出高电平时LED亮,输出低电平LED灭,现在用HAL函数库写一个代码,控制LED的亮和灭。

#include "stm32f4xx.h"
#include "core_cm4.h"
#include "stm32f4xx_hal.h"
#include "stdio.h"


void led_init(void)                                         /* 对LED串口进行初始化*/
{
    GPIO_InitTypeDef gpio_init_struct;                      /* 定义结构体 */
   
    gpio_init_struct.Pin = GPIO_PIN_10;                     /* LED引脚 */
    gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */
    gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */
    gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */

    HAL_GPIO_Init(GPIOF, &gpio_init_struct);                /* 初始化LED引脚 */

}



void main(void)
{
    HAL_Init();                                   /* 初始化HAL库 */

    __HAL_RCC_GPIOF_CLK_ENABLE();                  /* 使能F端口时钟 */

    led_init();                                /* 对LED串口进行初始化*/

 while(1)
    {
               /* 对LED的引脚设定为高电平,点亮LED */
        HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);


        delay_ms(500);             /* 延迟500ms   此函数在后面才能学到 */
 
              /* 对LED的引脚进行反转,熄灭LED */
        HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);

        delay_ms(500);
    }
}

delay_ms(500);  在后面时钟才能学到,这里只是表示一下。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值