(1)对单个IO的单个引脚基本操作,下面采用宏定义的例子
#define
#define
#define
#define DIR_1WIRE_IN() {DS18B20_PORT->CRL
#define DIR_1WIRE_OUT() {DS18B20_PORT->CRL
#define
#define
(2)设置端口IO方向
1)
a)
DIR_1WIRE_IN()
b)
GPIO_InitTypeDef
2)
a)
DIR_1WIRE_OUT()
b)
GPIO_InitTypeDef
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为输入
(2)对某个IO端口的多位读取
则采用GPIO_ReadInputData(DS18B20_PORT);//读取端口DS18B20_PORT
然后采用与或形式得到对应的若干位
例如想获得PIN_2的数据,可以采用
result1=GPIO_ReadInputData(DS18B20_PORT);
result2=result1&DS18B20_BIT;
其他依次类推,或者简单的,读取最低的两位1,0端口数据
result2=result1&0x3;//
(3)设置同一端口的多个IO设置输出方向和模式
设置端口IO的多个引脚为输入,如果程序中一直为输出,则在程序初始化时设置一次即可
(4)向某个端口的若干个引脚写数据
如果向某个端口的若干个引脚写数据,这几个IO已经设置成输出,
则先采用与或的形式把需要操作的若干位置成对应形式,不需操作的位保持原来不变
则为
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
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)如果程序中某端口的若干引脚即作为输入有又作为输出
如果先输入再输出,则是
如果先输出再输入,则是