欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程资源 > 编程问答 >内容正文

编程问答

void gpio-ag凯发k8国际

发布时间:2024/10/14 编程问答 6 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct)的一些理解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

((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)的一些理解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图