void gpio-ag凯发k8国际
((gpio_typedef *) gpioa_base)表示将gpioa_base强制转换为指针类型的结构体, #define gpioa ((gpio_typedef *) gpioa_base) 表示用(gpio_typedef *) gpioa_base代替gpioa ,那么现在gpioa就表示以 gpioa_base为基地址的一个类型为gpio_typedef结构体的一个指针,所以你程序里可以用gpioa->crl。
例如:
#define gpioa ((gpio_typedef *) gpioa_base)
typedef struct
{
__io uint32_t crl;
__io uint32_t crh;
__io uint32_t idr;
__io uint32_t odr;
__io uint32_t bsrr;
__io uint32_t brr;
__io uint32_t lckr;
} gpio_typedef;//除了定义结构体,它还把寄存器做了一个映射,映射到地址
那代码
void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct)
和
void led_init(void){
gpio_inittypedef gpio_initstructure;
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa|rcc_apb2periph_gpiod, enable); //使能pb,pe端口时钟
gpio_initstructure.gpio_pin = gpio_pin_8; //led0-->pb.5 端口配置
gpio_initstructure.gpio_mode = gpio_mode_out_pp; //推挽输出
gpio_initstructure.gpio_speed = gpio_speed_50mhz; //io口速度为50mhz
gpio_init(gpioa, &gpio_initstructure); //根据设定参数初始化gpiob.5
gpio_setbits(gpioa,gpio_pin_8); //pb.5 输出高
gpio_initstructure.gpio_pin = gpio_pin_2; //led1-->pe.5 端口配置, 推挽输出
gpio_init(gpiod, &gpio_initstructure); //推挽输出 ,io口速度为50mhz
gpio_setbits(gpiod,gpio_pin_2); //pe.5 输出高
}
中gpioa就是一个指向结构的指针,也就是首地址。
总结
以上是ag凯发k8国际为你收集整理的void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct)的一些理解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: stm32的时钟系统rcc详细整理(转)