STM32+RT-Thread学习笔记1——GPIO

STM32+RT-Thread学习笔记1——GPIO

一、GPIO的初始化方式

1、 使用库函数进行初始化
可以直接定义函数进行初始化,使用方法和裸机编程没有区别

void My_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_SET);

  /*Configure GPIO pin : PH10 */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
}

2、 使用rt设备进行初始化
使用这种方式进行初始化可能会存在一些问题,例如:

#define LED_RED_PIN   GET_PIN(H,10)
#define LED_BLUE_PIN  GET_PIN(H,11)

此时第一个编译通过,而第二个出现报错:

error: 'H' undeclared (first use in this function)

暂时还没有找到问题出现的原因,找到一种取代方法:
drv_gpio.c文件下找到对应管脚代码:

#if defined(GPIOH)
    __STM32_PIN(112, H, 0),
    __STM32_PIN(113, H, 1),
    __STM32_PIN(114, H, 2),
    __STM32_PIN(115, H, 3),
    __STM32_PIN(116, H, 4),
    __STM32_PIN(117, H, 5),
    __STM32_PIN(118, H, 6),
    __STM32_PIN(119, H, 7),
    __STM32_PIN(120, H, 8),
    __STM32_PIN(121, H, 9),
    __STM32_PIN(122, H, 10),
    __STM32_PIN(123, H, 11),
    __STM32_PIN(124, H, 12),
    __STM32_PIN(125, H, 13),
    __STM32_PIN(126, H, 14),
    __STM32_PIN(127, H, 15),

发现H,11管脚前面对应值为123,将代码改为:

#define LED_RED_PIN   GET_PIN(H,10)
#define LED_BLUE_PIN  123

OK,编译通过功能正常
接着使用下面的rt设备命令进行初始化即可

#define LED_RED1_PIN   GET_PIN(H,12)

void My_GPIO_Init(void)
{
  rt_pin_mode(LED_BLUE_PIN, PIN_MODE_OUTPUT);
  }

二、GPIO配置示例

1、 HAL库部分省略,可参考其他裸机编程
2、 rt设备库

类型参数含义
rt_base_tpin\之前通过#define定义的宏,本质是管脚编号
rt_base_tmodePIN_MODE_OUTPUT输出模式
PIN_MODE_INPUT输入模式
PIN_MODE_INPUT_PULLUP上拉电阻输入模式
PIN_MODE_INPUT_PULLDOWN下拉电阻输入模式
PIN_MODE_OUTPUT_OD开漏输出
rt_base_tvaluePIN_LOW低电平
PIN_HIGH高电平

void rt_pin_mode(rt_base_t pin, rt_base_t mode)

void rt_pin_write(rt_base_t pin, rt_base_t value)

int rt_pin_read(rt_base_t pin)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值