研究生
最后登录1970-1-1
在线时间 小时
注册时间2014-1-11
|
本帖最后由 hkhkdyx 于 2014-1-15 17:04 编辑
改动后的截图,仅仅把GPIO_InitStructure变为 *GPIO_InitStructure, 然后把GPIO_InitStructure.GPIO_Mode
改为了GPIO_InitStructure->GPIO_Mode,把GPIO_Init(GPIOB, &GPIO_InitStructure);改为GPIO_Init(GPIOB, GPIO_InitStructure); 编译器也没报错,为什么下载到板子就不能运行了呢?希望高手指点迷津啊。
此贴问题已经解决!
非常感谢各位的指教,问题已经查清,原因是没有初始化指针,导致变成野指针。解决办法是把指针初始化一下就行了。
再次感谢“yinhao”哥们,
“定义了一个结构体:GPIO_InitTypeDef GPIO_InitStructure;
你的GPIO_Init(GPIOB, &GPIO_InitStructure);
实际上是 GPIO_InitTypeDef* GPIO_InitStruct = &GPIO_InitStructure; 这样的赋值过程
就是用这个函数的参数里的这个指针指向了那个结构体的实体。所以你一开始应该定义一个结构体,然后取地址作为函数的参数。”
非常精辟解释了为什么直接定义结构体,而不用结构体指针的原因。
PS:用指针的办法实现整理:
void LED_GPIO_Config(void)
{
// 声明外部函数 malloc 和 free
extern void *malloc(unsigned int num_bytes);
extern void free(void *ptr);
/*定义一个GPIO_InitTypeDef类型的结构体指针*/
GPIO_InitTypeDef *GPIO_InitStructure;
GPIO_InitStructure = (GPIO_InitTypeDef*) malloc (sizeof(GPIO_InitTypeDef));
/*开启GPIOB和GPIOF的外设时钟*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);
/*选择要控制的GPIOB引脚*/
GPIO_InitStructure->GPIO_Pin = GPIO_Pin_0;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure->GPIO_Mode = GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz */
GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;
/*调用库函数,初始化GPIOB*/
GPIO_Init(GPIOB, GPIO_InitStructure);
/*选择要控制的GPIOF引脚*/
GPIO_InitStructure->GPIO_Pin = GPIO_Pin_7;
/*调用库函数,初始化GPIOF7*/
GPIO_Init(GPIOF, GPIO_InitStructure);
/*选择要控制的GPIOF引脚*/
GPIO_InitStructure->GPIO_Pin = GPIO_Pin_8;
/*调用库函数,初始化GPIOF7*/
GPIO_Init(GPIOF, GPIO_InitStructure);
/* 关闭所有led灯 */
GPIO_SetBits(GPIOB, GPIO_Pin_0);
/* 关闭所有led灯 */
GPIO_SetBits(GPIOF, GPIO_Pin_7|GPIO_Pin_8);
// 释放内存
free(GPIO_InitStructure);
}
|
|