RT_Thread_PIN读写

官方资料:PIN设备 (rt-thread.org)

1、代码

下面代码是宏定义引脚,然后操作引脚输出高低电平,并读取引脚电平;

(P.S.引脚是输出模式,也可以读取引脚电平的)

//宏定义LED的引脚编号PF9
#define LED0_PIN    GET_PIN(F, 9)

int main(void)	
{
	//设置LED为推挽输出
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);

    while (1)
    {
        rt_pin_write(LED0_PIN, PIN_HIGH);		//设置高电平
		rt_kprintf("led_status = %d\n",rt_pin_read(LED0_PIN));//读取电平
        rt_thread_mdelay(500);
        rt_pin_write(LED0_PIN, PIN_LOW);		//设置低电平
		rt_kprintf("led_status = %d\n",rt_pin_read(LED0_PIN));//读取电平
        rt_thread_mdelay(500);
    }
}

2、获取引脚编号 GET_PIN

2.1、GET_PIN的宏定义

#define GET_PIN(PORTx,PIN) (rt_base_t)((16 * ( ((rt_base_t)__STM32_PORT(PORTx) - (rt_base_t)GPIOA_BASE)/(0x0400UL) )) + PIN)

2.2、__STM32_PORT(port)的宏定义

##是字符串连接的意思,比如__STM32_PORT(F),也就是GPIO##F##_BASE,即 GPIOF_BASE

#define __STM32_PORT(port)  GPIO##port##_BASE

 2.3、下面是各个GPIO的地址,PF9带入GET_PIN的宏展开:

((16*(GPIOF_BASE-GPIOA_BASE)/1024)+9)

=((16*5)+9)

= 89

/*!< AHB1 peripherals */
#define GPIOA_BASE            (AHB1PERIPH_BASE + 0x0000UL)
#define GPIOB_BASE            (AHB1PERIPH_BASE + 0x0400UL)
#define GPIOC_BASE            (AHB1PERIPH_BASE + 0x0800UL)
#define GPIOD_BASE            (AHB1PERIPH_BASE + 0x0C00UL)
#define GPIOE_BASE            (AHB1PERIPH_BASE + 0x1000UL)
#define GPIOF_BASE            (AHB1PERIPH_BASE + 0x1400UL)
#define GPIOG_BASE            (AHB1PERIPH_BASE + 0x1800UL)
#define GPIOH_BASE            (AHB1PERIPH_BASE + 0x1C00UL)
#define GPIOI_BASE            (AHB1PERIPH_BASE + 0x2000UL)

 对不对可以测试下,直接 #define LED0_PIN        89

还有一种获取引脚编号的方式rt_pin_get,在程序中打印rt_kprintf("PF9 = %d\n",rt_pin_get("PF.9")); ,

串口打印确实也是89;

3、配置引脚模式 rt_pin_mode

参数:     pin:引脚编号

                mode:

PIN_MODE_OUTPUT推挽输出
PIN_MODE_INPUT浮空输入
PIN_MODE_INPUT_PULLUP上拉输入
PIN_MODE_INPUT_PULLDOWN下拉输入
PIN_MODE_OUTPUT_OD开漏输出

返回:     无

void rt_pin_mode(rt_base_t pin, rt_base_t mode);

4、写引脚电平 rt_pin_write

参数:     pin:引脚编号

                value:电平逻辑值,可取 2 种值之一,PIN_LOW 低电平,PIN_HIGH 高电平

返回:     无

void rt_pin_write(rt_base_t pin, rt_base_t value);

5、读引脚电平 rt_pin_read

参数:     pin:引脚编号

返回:     PIN_LOW 低电平;PIN_HIGH 高电平

int rt_pin_read(rt_base_t pin);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值