[STM32F1] F1和F4对GPIO的操作区别

[复制链接]
469|8
 楼主| 铁血丹心LLLL 发表于 2023-7-26 17:04 | 显示全部楼层 |阅读模式
GPIO, IO, gp, pi
以下是stm32f4xx.h中对GPIO的定义。


  1. typedef struct
  2. {
  3.   __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  4.   __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  5.   __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  6.   __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  7.   __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  8.   __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
  9.   __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
  10.   __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  11.   __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  12.   __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
  13. } GPIO_TypeDef;


 楼主| 铁血丹心LLLL 发表于 2023-7-26 17:05 | 显示全部楼层
以下是stm32f10x.h中对GPIO的定义。
  1. typedef struct
  2. {
  3.   __IO uint32_t CRL;
  4.   __IO uint32_t CRH;
  5.   __IO uint32_t IDR;
  6.   __IO uint32_t ODR;
  7.   __IO uint32_t BSRR;
  8.   __IO uint32_t BRR;
  9.   __IO uint32_t LCKR;
  10. } GPIO_TypeDef;
 楼主| 铁血丹心LLLL 发表于 2023-7-26 17:05 | 显示全部楼层
F1的CRL、CRH用于配置输入输出、推完开漏模式、速度、上下拉输入、复用输出,和F4的MODER、OTYPER、OSPEEDR、PUPDR、AFR[2]等效。

IDR和ODR都是一样的,输入输出寄存器。

F1的BSRR的低16位是置位,F4的BSRRL是置位。(F1的BSRR高16位和BRR等效,都是复位)

F1的BRR是复位,F4的BSRRH是复位。

LCKR是锁存配置,一般不用。
 楼主| 铁血丹心LLLL 发表于 2023-7-26 17:05 | 显示全部楼层
然后F1的AFIO是独立的,不在GPIO的结构体里。

下面举个F4设置IO电平的例子:
  1. #define CONVST_1()        GPIOC->BSRRL = GPIO_Pin_6
  2. #define CONVST_0()        GPIOC->BSRRH = GPIO_Pin_6
 楼主| 铁血丹心LLLL 发表于 2023-7-26 17:05 | 显示全部楼层
F1设置IO电平的例子:
  1. #define CONVST_1()        GPIOC->BSRR = GPIO_Pin_6
  2. #define CONVST_0()        GPIOC->BRR = GPIO_Pin_6

操作之前记得初始化!
yiy 发表于 2023-7-26 20:38 | 显示全部楼层
在cubeMX面前这些都不是问题。
地瓜patch 发表于 2023-7-26 21:25 来自手机 | 显示全部楼层
搞单片机成为软件工程师了,有几个会配寄存器的
内政奇才 发表于 2023-9-26 16:29 | 显示全部楼层
总的来说,虽然F1和F4在GPIO的基本功能上相似,但在GPIO寄存器的定义、配置、翻转速度、UART串口数量以及I2C接口数量等方面存在差异。
MessageRing 发表于 2023-9-30 19:05 | 显示全部楼层
可以用cubeMX来配置这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

76

主题

543

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部