您的位置 首页 制造

GPIO的操作

一、对IO的单个引脚操作,采用宏定义较为方便(1)对单个IO的单个引脚基本操作,下面采用宏定义的例子defineDS18B20_BITGPIO_Pin_2宏

一、对IO的单个引脚操作,选用宏界说较为便利
(1)对单个IO的单个引脚根本操作,下面选用宏界说的比如
#defineDS18B20_BIT GPIO_Pin_2//宏界说GPIO_Pin_2引脚新名为DS18B20_BIT,也可认为其他称号
#defineDS18B20_PORT GPIOC////宏界说GPIOC端口新名为DS18B20_PORT,也可认为其他称号
#defineREAD_DS18B20() GPIO_ReadInputDataBit(DS18B20_PORT,DS18B20_BIT)//读取端口DS18B20_PORT的DS18B20_BIT位状况GPIO_ReadInputDataBit()为库函数,不必自己写
#define DIR_1WIRE_IN() {DS18B20_PORT->CRL&=0xFFFFF0FF;DS18B20_PORT->CRL|=0x00000400;}//设置DS18B20_PORT的第2个IO引脚为输入方式,CRL寄存器仅能设置端口的低8个引脚,高8个用CRH,详见手册113页
#define DIR_1WIRE_OUT() {DS18B20_PORT->CRL&=0xFFFFF0FF;DS18B20_PORT->CRL|=0x00000300;}////设置DS18B20_PORT的第2个IO引脚为输出方式
#defineCLR_OP_1WIRE() GPIO_ResetBits(DS18B20_PORT,DS18B20_BIT)//设置端口DS18B20_PORT的DS18B20_BIT位为0
#defineSET_OP_1WIRE() GPIO_SetBits(DS18B20_PORT,DS18B20_BIT)//设置端口DS18B20_PORT的DS18B20_BIT位为1
(2)设置端口IO方向
1)其间设置端口方向输入的方法为a或b
a)
DIR_1WIRE_IN()
b)
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//此处有其他参数能够挑选,拜见固件库阐明和手册阐明
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//此处有其他参数能够挑选,拜见固件库阐明和手册阐明
GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);

2)其间设置端口方向输出的方法为a或b
a)
DIR_1WIRE_OUT()
b)
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);
3)运用DIR_1WIRE_IN()和DIR_1WIRE_OUT() 时这两个函数在设置对应端口时,应根据DS18B20_BIT的对应位设置与或的参数。上面比如由于是对DS18B20_PORT的DS18B20_BIT位操作,DS18B20_BIT实践对应Pin_2即第2个引脚,所以修正方位为倒数第3个f处(倒数第3个f为Pin_2对应方位,倒数第1个f为Pin_0对应方位)

3)假如读取IO,先设置为输入方式,再读取
DIR_1WIRE_IN()
READ_DS18B20()
即完成了读取DS18B20_PORT端口的DS18B20_BIT的数据

(4)假如设置为输出状况,在先设置输出方式,在向外输出
DIR_1WIRE_OUT()
输出1则为SET_OP_1WIRE()
输出0则为CLR_OP_1WIRE()
(5)假如先设置为输出,输出1,再设置为输入,读取输入,则为
DIR_1WIRE_OUT()
输出1则为SET_OP_1WIRE()
DIR_1WIRE_IN()
READ_DS18B20()
(6)假如先设置为输出,输出1,再设置为输入,读取输入,则为
DIR_1WIRE_IN()
READ_DS18B20()
DIR_1WIRE_OUT()
输出1则为SET_OP_1WIRE()

二、对同一端口的多个IO一块操作
(1)设置同一端口的多个IO设置输入方向和方式
设置端口IO的多个引脚为输入,假如程序中一向为输入,则在程序初始化时设置一次即可
例如设置DS18B20_PORT端口的引脚5,3为输入
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//此处有其他参数能够挑选,拜见固件库阐明和手册阐明
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//此处有其他参数能够挑选,拜见固件库阐明和手册阐明
GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);
(2)对某个IO端口的多位读取
假如对某个IO端口的多位读取,这几个IO现已设置成输入
则选用GPIO_ReadInputData(DS18B20_PORT);//读取端口DS18B20_PORT
然后选用与或方式得到对应的若干位
例如想取得PIN_2的数据,能够选用
result1=GPIO_ReadInputData(DS18B20_PORT);//拜见库函数stm32f10x_gpio.c
result2=result1&DS18B20_BIT;
其他顺次类推,或许简略的,读取最低的两位1,0端口数据
result2=result1&0x3;//

(3)设置同一端口的多个IO设置输出方向和方式
设置端口IO的多个引脚为输入,假如程序中一向为输出,则在程序初始化时设置一次即可
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);

(4)向某个端口的若干个引脚写数据
假如向某个端口的若干个引脚写数据,这几个IO现已设置成输出,
则先选用与或的方式把需求操作的若干方位成对应方式,不需操作的位坚持本来不变
1)例如向端口的引脚5,3写数据1,1
则为
result1=GPIO_ReadOutputData(DS18B20_PORT);//读取DS18B20_PORT的输出数据,拜见库函数stm32f10x_gpio.c,手册拜见115页
result2=0x0028;//设置引脚5,3为1,1
result1&=0xffd7;//引脚5,3先清零,一起获取其他引脚的原始状况
result1=result1|result2;//设置引脚5,3为1,1;其他引脚不变

2)例如向端口的引脚5,3写数据1,0
result1=GPIO_ReadOutputData(DS18B20_PORT);//读取DS18B20_PORT的输出数据,拜见库函数stm32f10x_gpio.c,手册拜见115页
result2=0x0020;//设置引脚5,3为1,0,此处留意与上面的差异
result1&=0xffd7;//引脚5,3先清零,一起获取其他引脚的原始状况
result1=result1|result2;//设置引脚5,3为1,0;其他引脚不变

(5)假如程序中某端口的若干引脚即作为输入有又作为输出
假如先输入再输出,则是(1)(2)(3)(4)的次序
假如先输出再输入,则是(4)(3)(2)(1)的次序

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/259014.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部