一、STM32 I/O 简介在 STM32 中I/O 引脚又称为 GPIO (General-Purpose I/O)可以被软件设置成各种不同的功能及模式。主要分为 GPIOA、GPIOB、 GPIOC……不同的组每组端口分为 0~15共 16 个不同的引脚。不同型号的芯片具有不同的端口组和不同的引脚数量。与 GPIO 相关的寄存器主要有以下几种配置寄存器配置 GPIO 的模式及状态如输入/输出模式、复用功能及输出的最大速度等如端口配置低寄存器GPIOx_CRL、端口配置高寄存器GPIO_CRH数据寄存器保存了 GPIO 的输入电平或将要输出的电平如端口输入数据寄存器GPIOx_IDR、端口输出数据寄存器GPIOx_ODR位控制寄存器设置某引脚的数据为1 或 0如端口位设置/清除寄存器GPIOx_BSRR、端口位清除寄存器GPIOx_BRR锁定寄存器设置某锁定引脚后就不能修改其配置如端口配置锁定寄存器GPIOx_LCKR其中xA...E。1.1 GPIO 的 8 中工作模式如上图所示图的最右端为 I/O 引脚左端的器件位于芯片内部。I/O 引脚并联了两个用于保护的二极管。结构图的上半部分为输入模式结构下半部分为输出模式结构。I/O 引脚并联了两个用于保护的二极管。结构图的上半部分为输入模式结构下半部分为输出模式结构。输入输出模式结构都可以由软件分别配置成 8 种模式包括浮空输入、上拉输入、下拉输入 、模拟输入、通用开漏输出、通用推挽式输出、复用推挽式输出和复用开漏输出见上表。1.1.1 上拉、下拉和浮空输入配置在上拉/下拉/浮空输入模式中输出缓冲器被禁止施密特触发器输入被激活根据输入配置上拉下拉或浮动的不同弱上拉和下拉电阻被连接读输入数据寄存器的值可得到 I/O 状态1.1.2 通用输出配置图中箭头表示信号流动方向输出缓冲器是由 P-MOS 和 N-MOS 管组成的单元电路推挽/开漏输出模式是根据其工作方式来命名的。当 I/O 端口被配置为输出时输出缓冲器被激活施密特触发输入被激活弱上拉和下拉电阻被禁止。1.1.3 复用输出配置当 I/O 端口被配置为复用功能时输出缓冲器被打开内置外设的信号驱动输出缓冲器施密特触发输入被激活弱上拉和下拉电阻被禁止。至于选择复用开漏输出还是复用推挽输出是根据 GPIO 复用功能来选择的如 GPIO 的引脚用作串口输出则使用复用推挽输出模式如用在I2C、SMBUS 等这些需要“线与”功能的复用场合就使用复用开漏模式。1.1.4 模拟输入配置模拟输入模式关闭了施密特触发器不接上、下拉电阻经由另一线路把电压信号传送到片上外设模块。如传送给 ADC 模块由 ADC 采集电压信号。所以使用 ADC 外设时必须设置为模拟输入模式。在此模式中输出缓冲器被禁止禁止施密特触发输入实现了每个模拟 I/O 引脚上的零消耗施密特触发输出值被强制置为 0弱上拉和下拉电阻被禁止读取输入数据寄存器时数值为0。配置时注意GPIO 在输入模式下是不需要设置端口的最大输出速度的在使用任何一种开漏模式时都需要接上拉电阻。1.2 GPIO 相关寄存器配置调用库函数来配置寄存器可以脱离底层寄存器操作使得开发效率提高同时易于阅读和维护。GPIO 相关的函数和定义分布在固件库文件 stm32f10x_gpio.c 和头文件 stm32f10x_gpio.h 文件中。GPIO_InitTypeDef 结构体的定义typedef struct { uint16_t GPIO_Pin; //GPIO引脚 GPIOMode_TypeDef GPIO_Mode; //GPIO模式 GPIOSpeed_TypeDef GPIO_Speed; //GPIO速度 }GPIO_InitTypeDef;I/O配置常用的寄存器端口输出数据寄存器 ODR 寄存器端口输入数据寄存器 IDR端口位设置/清除寄存器 (GPIOx_BSRR)端口位清除寄存器 (GPIOx_BRR)1.3 开启 I/O 端时钟STM32 外设时钟默认是处在关闭状态的因此初始化 GPIO 后还需要使能外设时钟GPIO 挂载在 APB2 总线上需调用库函数RCC_APB2PeriphClockCmd( )。二、 SysTick 定时器在 ARM Cortex-M3 内核中有一个 SysTick滴答定时器它是一个 24 位的倒计数定时器当计数到 0 时它就会从 Load 寄存器中自动重装定时初值只要不把 CTRL 寄存器中的ENABLE 清 0它就永不停。2.1、SysTick 定时器的时钟来源滴答定时器不是系统时钟的 1/8SysTick 定时器的时钟既可以是 HCLK/8也可以是 HCLK这个是通过 CTRL 寄存器进行设定的操作系统的时钟要精确计算时钟时间所以了解这一点对于计算很重要。2.2、SysTick定时器的寄存器SysTick 的寄存器有 4 个分别为控制和状态寄存器当前值寄存器重装值寄存器定时校验寄存器。通常使用的前三个寄存器1控制和状态CTRL寄存器2重装值 LOAD 寄存器3当前值VAL寄存器2.3、SysTick定时器设定步骤设定 Systick 定时器需要四个步骤选择时钟源设定重载数reload开启中断启动滴答定时器。三、I/O 口位输出流水灯测试四、I/O 口位输入按键测试五、I/O 口组输出扫描数码管测试
06、STM32 的 I/O 应用
一、STM32 I/O 简介在 STM32 中I/O 引脚又称为 GPIO (General-Purpose I/O)可以被软件设置成各种不同的功能及模式。主要分为 GPIOA、GPIOB、 GPIOC……不同的组每组端口分为 0~15共 16 个不同的引脚。不同型号的芯片具有不同的端口组和不同的引脚数量。与 GPIO 相关的寄存器主要有以下几种配置寄存器配置 GPIO 的模式及状态如输入/输出模式、复用功能及输出的最大速度等如端口配置低寄存器GPIOx_CRL、端口配置高寄存器GPIO_CRH数据寄存器保存了 GPIO 的输入电平或将要输出的电平如端口输入数据寄存器GPIOx_IDR、端口输出数据寄存器GPIOx_ODR位控制寄存器设置某引脚的数据为1 或 0如端口位设置/清除寄存器GPIOx_BSRR、端口位清除寄存器GPIOx_BRR锁定寄存器设置某锁定引脚后就不能修改其配置如端口配置锁定寄存器GPIOx_LCKR其中xA...E。1.1 GPIO 的 8 中工作模式如上图所示图的最右端为 I/O 引脚左端的器件位于芯片内部。I/O 引脚并联了两个用于保护的二极管。结构图的上半部分为输入模式结构下半部分为输出模式结构。I/O 引脚并联了两个用于保护的二极管。结构图的上半部分为输入模式结构下半部分为输出模式结构。输入输出模式结构都可以由软件分别配置成 8 种模式包括浮空输入、上拉输入、下拉输入 、模拟输入、通用开漏输出、通用推挽式输出、复用推挽式输出和复用开漏输出见上表。1.1.1 上拉、下拉和浮空输入配置在上拉/下拉/浮空输入模式中输出缓冲器被禁止施密特触发器输入被激活根据输入配置上拉下拉或浮动的不同弱上拉和下拉电阻被连接读输入数据寄存器的值可得到 I/O 状态1.1.2 通用输出配置图中箭头表示信号流动方向输出缓冲器是由 P-MOS 和 N-MOS 管组成的单元电路推挽/开漏输出模式是根据其工作方式来命名的。当 I/O 端口被配置为输出时输出缓冲器被激活施密特触发输入被激活弱上拉和下拉电阻被禁止。1.1.3 复用输出配置当 I/O 端口被配置为复用功能时输出缓冲器被打开内置外设的信号驱动输出缓冲器施密特触发输入被激活弱上拉和下拉电阻被禁止。至于选择复用开漏输出还是复用推挽输出是根据 GPIO 复用功能来选择的如 GPIO 的引脚用作串口输出则使用复用推挽输出模式如用在I2C、SMBUS 等这些需要“线与”功能的复用场合就使用复用开漏模式。1.1.4 模拟输入配置模拟输入模式关闭了施密特触发器不接上、下拉电阻经由另一线路把电压信号传送到片上外设模块。如传送给 ADC 模块由 ADC 采集电压信号。所以使用 ADC 外设时必须设置为模拟输入模式。在此模式中输出缓冲器被禁止禁止施密特触发输入实现了每个模拟 I/O 引脚上的零消耗施密特触发输出值被强制置为 0弱上拉和下拉电阻被禁止读取输入数据寄存器时数值为0。配置时注意GPIO 在输入模式下是不需要设置端口的最大输出速度的在使用任何一种开漏模式时都需要接上拉电阻。1.2 GPIO 相关寄存器配置调用库函数来配置寄存器可以脱离底层寄存器操作使得开发效率提高同时易于阅读和维护。GPIO 相关的函数和定义分布在固件库文件 stm32f10x_gpio.c 和头文件 stm32f10x_gpio.h 文件中。GPIO_InitTypeDef 结构体的定义typedef struct { uint16_t GPIO_Pin; //GPIO引脚 GPIOMode_TypeDef GPIO_Mode; //GPIO模式 GPIOSpeed_TypeDef GPIO_Speed; //GPIO速度 }GPIO_InitTypeDef;I/O配置常用的寄存器端口输出数据寄存器 ODR 寄存器端口输入数据寄存器 IDR端口位设置/清除寄存器 (GPIOx_BSRR)端口位清除寄存器 (GPIOx_BRR)1.3 开启 I/O 端时钟STM32 外设时钟默认是处在关闭状态的因此初始化 GPIO 后还需要使能外设时钟GPIO 挂载在 APB2 总线上需调用库函数RCC_APB2PeriphClockCmd( )。二、 SysTick 定时器在 ARM Cortex-M3 内核中有一个 SysTick滴答定时器它是一个 24 位的倒计数定时器当计数到 0 时它就会从 Load 寄存器中自动重装定时初值只要不把 CTRL 寄存器中的ENABLE 清 0它就永不停。2.1、SysTick 定时器的时钟来源滴答定时器不是系统时钟的 1/8SysTick 定时器的时钟既可以是 HCLK/8也可以是 HCLK这个是通过 CTRL 寄存器进行设定的操作系统的时钟要精确计算时钟时间所以了解这一点对于计算很重要。2.2、SysTick定时器的寄存器SysTick 的寄存器有 4 个分别为控制和状态寄存器当前值寄存器重装值寄存器定时校验寄存器。通常使用的前三个寄存器1控制和状态CTRL寄存器2重装值 LOAD 寄存器3当前值VAL寄存器2.3、SysTick定时器设定步骤设定 Systick 定时器需要四个步骤选择时钟源设定重载数reload开启中断启动滴答定时器。三、I/O 口位输出流水灯测试四、I/O 口位输入按键测试五、I/O 口组输出扫描数码管测试