微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这是一个关于C语言的问题,和32也有点联系。求大神赐教。

这是一个关于C语言的问题,和32也有点联系。求大神赐教。

时间:10-02 整理:3721RD 点击:
以下的一段代码是32程序里的,我的问题是:GPIOB是一个经过强制类型转换将数字转换为合适的地址类型的。而ODR是结构体里面定义的一个uint类型的变量,ODR没有进行初始化,那么GPIOB->ODR的值是GPIOB所蕴含的值吗?或者是我理解错了是其他的意思呢?请大神赐教,谢谢!

GPIOB->ODR|=1<<5;      //PB.5 输出高

再看看32的固件库,有库函数用到的,看完就明白了

输出寄存器,为了不改变其他位,要先读再写,odr并不等于GPIOB的值,只有所有端口都做输出时才等于GPIOB的值

GPIOB是指向结构体的首地址,里面并不会蕴含什么值,ODR是里面定义的某一个变量,这个语句是控制单引脚输出而不影响其他引脚的状态,如果你说的是端口状态的话,需要去读取才能获取,而不是直接就在GPIOB里面的。

现在都是模块化封装,比如你有4组gpio a,b,c,d。所以就可以这样定义
type_name struct{
     xx;
     xx;
     xx;
};里面都是寄存器相关的,这样我可以定义  #define   (type_name*)gpioA    0xxxxx(a起始地址,也就是第一个gpioa第一个寄存器起始地址),然后就可以像结构体一样使用。看寄存器地址定义,在。h里面。1<<5不就是bit5,0x20,就是pin5,这样就好理解了。

结构体的某个变量

绑定一下哈哈哈哈哈

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top