STM32/STM8技术论坛
直播中

lh_include

10年用户 44经验值
擅长:电源/新能源 嵌入式技术 光电显示 控制/MCU
私信 关注
[讨论]

新手求教关于STM32中用结构体指针的问题!!

  1. void LED_Init(void)
  2. {

  3.     GPIO_InitTypeDef  GPIO_InitStructure;                 //定义一个初始化GPIO的一个结构体GPIO_InitStructure
  4.        
  5.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);         //使能PA,PD端口时钟
  6.    
  7.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 //LED0-->PA.8 端口配置
  8.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  9.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  10.     GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOA.8
  11.     GPIO_SetBits(GPIOA,GPIO_Pin_8);                                                 //PA.8 输出高
  12.    
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                             //LED1-->PD.2 端口配置, 推挽输出
  14.     GPIO_Init(GPIOD, &GPIO_InitStructure);                                           //推挽输出 ,IO口速度为50MHz
  15.     GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                  //PD.2 输出高
  16.    
  17.     //一下为自己修改的结构体指针操作,有问题
  18.     /*GPIO_InitTypeDef  *GPIO_InitStructure;                   //定义一个初始化GPIO的一个结构体指针 *GPIO_InitStructure
  19.        
  20.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);         //使能PA,PD端口时钟
  21.    
  22.     GPIO_InitStructure->GPIO_Pin = GPIO_Pin_8;                                 //LED0-->PA.8 端口配置
  23.     GPIO_InitStructure->GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  24.     GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz

  25.     GPIO_Init(GPIOA, GPIO_InitStructure);                                         //根据设定参数初始化GPIOA.8
  26.     GPIO_SetBits(GPIOA,GPIO_Pin_8);                                                      //PA.8 输出高
  27.    
  28.     GPIO_InitStructure->GPIO_Pin = GPIO_Pin_2;                             //LED1-->PD.2 端口配置, 推挽输出

  29.     GPIO_Init(GPIOD, GPIO_InitStructure);                                           //推挽输出 ,IO口速度为50MHz
  30.     GPIO_SetBits(GPIOD,GPIO_Pin_2);                                                  //PD.2 输出高           
  31.    */
  32. }

关于结构体指针的问题,我用了下面被注释代码,编译能通过,就是烧到板子上没啥效果,实在找不出代码那里有问题,大家帮帮忙,谢了

回帖(4)

ahtsls

2014-10-16 12:26:52
配置问题,GPIO_InitStructure->GPIO_Pin 。你定义的结构体里有没有这个变量。
举报

那低头一笑的温

2014-10-16 21:56:14
新手就不要乱用用指针了,按照上面直接用结构体就行了。
指针使用之前是必须要初始化的,也就是要说明你要使用的指针是指向哪个内存块的,
比如:
GPIO_InitTypeDef  GPIO_InitStructure;
GPIO_InitTypeDef  *pGPIO_InitStructure = &GPIO_InitStructure;
这里定义了一个叫pGPIO_InitStructure的GPIO_InitTypeDef指针,该指针指向的是新开辟的名叫GPIO_InitStructure的内存,该内存存放的是一个GPIO_InitTypeDef结构体。
如果只是一句
GPIO_InitTypeDef  *GPIO_InitStructure;
请问 *GPIO_InitStructure指向哪里?它随机指向一块内存,然后不管原来这块内存是用来干什么的,把它当做GPIO_InitTypeDef结构体读取或写入数据这样肯定是会出错的
举报

陈锐文

2014-10-27 01:51:55
你先查一下->和. 的区别。
举报

lh_include

2014-10-30 19:45:27
引用: 那低头一笑的温 发表于 2014-10-16 21:56
新手就不要乱用用指针了,按照上面直接用结构体就行了。
指针使用之前是必须要初始化的,也就是要说明你要 ...

哦哦~谢谢了!



举报

更多回帖

发帖
×
20
完善资料,
赚取积分