STM32CubeMX——GPIO配置

说明

本文将以STM32F103C8T6单片机为例讲解GPIO引脚的配置

GPIO-output

配置部分

新建工程

  • 搜索单片机型号(STM32F103C8T6)
  • 选择单片机
  • 创建工程在这里插入图片描述

配置系统时钟

  • 选择高速时钟(外部陶瓷晶体振荡器)
  • 选择低速时钟(外部陶瓷晶体振荡器)
    在这里插入图片描述

配置GPIO引脚(以PB15为例)

  • 选择PB15引脚配置成output模式
    在这里插入图片描述
  • 配置引脚功能
    • 切换到GPIO选项面板
    • 选择对应的GPIO引脚(PB15)
    • 对框内属性进行配置
      在这里插入图片描述
  1. 配置GPIO输出级别:Low(低级别)
  2. GPIO的输出模式:Output Push Pull(推挽输出)
  3. GPIO是否上下拉:No pull-up and no pull-down(既不上拉也不下拉)
  4. GPIO输出速度:Low(低速)
  5. 用户标签:

配置时钟树

  • 选择时钟设置界面
  • 将HCLK配置到72MHz,系统自动配置各个时钟
    在这里插入图片描述

项目文件设置

  • 选择文件设置选项卡
  • 设置项目名称
  • 设置存储位置
  • 选择所用IDE
    在这里插入图片描述
  • 选择为每个功能生成一个.c和.h文件
  • 生成代码
    在这里插入图片描述

代码部分

函数说明

// 与GPIO-output有关代码
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);//设置GPIO引脚电平
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);//翻转GPIO引脚电平(原状态为高电平,则变为低电平;原状态为低电平,则变为高电平)

应用举例

/* USER CODE BEGIN 3 */

//设置GPIO电平实例
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_SET);//设置PB15引脚为高电平
HAL_Delay(500);//延时500ms
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15,GPIO_PIN_RESET);//设置PB15引脚为低电平
HAL_Delay(500);//延时500ms

//翻转GPIO电平实例
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_15);//翻转GPIO引脚电平
HAL_Delay(500);//延时500ms

/* USER CODE END 3 */

GPIO-input

配置部分

新建工程

  • 搜索单片机型号(STM32F103C8T6)
  • 选择单片机
  • 创建工程在这里插入图片描述

配置系统时钟

  • 选择高速时钟(外部陶瓷晶体振荡器)
  • 选择低速时钟(外部陶瓷晶体振荡器)
    在这里插入图片描述

配置GPIO引脚(以PB15为例)

  • 选择PB15引脚配置成input模式
    在这里插入图片描述
  • 配置引脚功能
    • 切换到GPIO选项面板
    • 选择对应的GPIO引脚(PB15)
    • 对框内属性进行配置
      在这里插入图片描述
  1. GPIO模式:输入模式
  2. GPIO是否上下拉:Pull-up(上拉)
  3. 用户标签:

配置时钟树

  • 选择时钟设置界面
  • 将HCLK配置到72MHz,系统自动配置各个时钟
    在这里插入图片描述

项目文件设置

  • 选择文件设置选项卡
  • 设置项目名称
  • 设置存储位置
  • 选择所用IDE
    在这里插入图片描述
  • 选择为每个功能生成一个.c和.h文件
  • 生成代码
    在这里插入图片描述

代码部分

函数说明

// 与GPIO-input有关函数
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);//读取GPIO引脚状态

应用举例

/* USER CODE BEGIN 3 */
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)==GPIO_PIN_RESET){//判断PB15引脚是否为低电平
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_SET);//设置PB14引脚为高电平
}else{
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14,GPIO_PIN_RESET);//设置PB14引脚为低电平
}
/* USER CODE END 3 */
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,关于STM32模拟IIC,下面是一份示例代码,你可以参考一下。 首先,需要在STM32CubeMX配置IIC引脚,选择PB6和PB7作为SCL和SDA引脚。 接下来,打开CubeMX的“Pinout”选项卡,在左侧的“Categories”中选择“I2C1”,将PB6和PB7分别设置为SCL和SDA引脚。然后点击“Generated Code”生成代码。 在生成的代码中,你需要找到以下部分: ``` /* I2C1 GPIO Configuration PB6 ------> I2C1_SCL PB7 ------> I2C1_SDA */ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ``` 这是IIC引脚的配置代码,确保你的引脚与这里的配置相同。 接下来,是IIC初始化和读写数据的代码: ``` I2C_HandleTypeDef hi2c1; void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { Error_Handler(); } } void I2C_WriteData(uint8_t addr, uint8_t reg, uint8_t data) { HAL_I2C_Mem_Write(&hi2c1, addr << 1, reg, I2C_MEMADD_SIZE_8BIT, &data, 1, 1000); } void I2C_ReadData(uint8_t addr, uint8_t reg, uint8_t* data, uint8_t len) { HAL_I2C_Mem_Read(&hi2c1, addr << 1, reg, I2C_MEMADD_SIZE_8BIT, data, len, 1000); } ``` 其中,MX_I2C1_Init()函数用于初始化IIC,I2C_WriteData()函数用于向设备写入数据,I2C_ReadData()函数用于从设备读取数据。 使用示例: ``` uint8_t data = 0x12; I2C_WriteData(0x50, 0x20, data); //向地址为0x50的设备的0x20寄存器写入0x12 uint8_t readData[2] = {0}; I2C_ReadData(0x50, 0x20, readData, 2); //从地址为0x50的设备的0x20寄存器读取2个字节的数据 ``` 你可以根据你的具体需求修改代码中的地址、寄存器和数据等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值