stm32f103如何直接操纵和读取单个i\o口的值

 我来答
元飞珍DR
推荐于2016-12-02 · TA获得超过2429个赞
知道小有建树答主
回答量:309
采纳率:95%
帮助的人:121万
展开全部

首先,要确定IO口是作输入还是输出。

其次,根据要求对IO口进行初始化配置:1、配置IO口的模式(模拟输入?浮空输入?上拉输入?下拉输入?推挽输出?开漏输出?复用推挽输出?复用开漏输出?);2、若是输出端口,还需配置最大输出速度。

再次,利用STM32F103系列芯片的“位段”特性,将GPIO的输入寄存器(GPIOx_IDR)或输出寄存器(GPIOx_ODR)中每一位对映到“别名存储区”相应的字节。

这样,对“别名存储区”中相应字节的读/写  即相当于对  输入寄存器/输出寄存器的读/写。

 

 

 


 

位段的映射例子(假设PE2初始化为上拉输入,PE1初始化为推挽输出):

#define   X00   (*(__IO uint32_t *) (PERIPH_BB_BASE + ((GPIOE_BASE+8  - PERIPH_BASE) * 32) + (2 * 4)))

//这是将GPIOE_IDR.bit2映射为 X00;这样,对X00读入相当于对GPIOE_IDR的bit2的读入。如:当GPIOE_IDR.bit2为高时,X00的最低位为1;当bit2为低时,X00的最低位为0。 注:X00是8位数据,但只有最低有效,即只有最低位指示GPIOE_IDR.bit2的状态,其他位无效。

 

 

#define   Y00(X)   (*(__IO uint32_t *) (PERIPH_BB_BASE + ((GPIOE_BASE+12 - PERIPH_BASE) * 32) + (1 * 4))=X)

//这一句是将GPIOE_ODR.bit1映射为Y00。如:若要GPIOE_ODR.bit1置高,只需写命令 Y00(1);  即可;若要将GPIOE_ODR.bit1拉低,只需写 Y00(0);  就可以了。 注:X可以是8位数据,但只有最低位有效,即只有最低位会影响GPIOE_ODR.bit1的状态,其他位无效。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式