OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5441|回复: 4

【新手】摸索了两天,用库函数写了一个LED闪烁程序,高手勿喷

[复制链接]

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-5-30
在线时间
0 小时
发表于 2013-6-1 16:08:25 | 显示全部楼层 |阅读模式
首先配置GPIO时钟(需要放在程序靠前),这儿有两种方法:
1.使用库函数RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 【在库函数207页】
2.使用函数模块
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); 
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
/* ?HSE?????????? */
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); 
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
/* Flash 2 wait state */
//  FLASH_SetLatency(FLASH_Latency_2);
/* Enable Prefetch Buffer */
//  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}

然后配置GPIO:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义指向结构体的指针类型
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;//选中管脚8,库函数124页
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置选中管脚的速率
GPIO_Init(GPIOA, &GPIO_InitStructure);//根据GPIO_InitStructure 中指定的参数初始化外设 GPIOx 寄存器 
GPIO_SetBits(GPIOA,GPIO_Pin_8);//拉高
}

所有代码如下
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
// void RCC_Configuration(void)
// {
//  ErrorStatus HSEStartUpStatus;
//  RCC_DeInit(); 
//  RCC_HSEConfig(RCC_HSE_ON);
//  HSEStartUpStatus = RCC_WaitForHSEStartUp();
//  /* ?HSE?????????? */
//  if(HSEStartUpStatus == SUCCESS)
//  {
//  RCC_HCLKConfig(RCC_SYSCLK_Div1); 
//  RCC_PCLK2Config(RCC_HCLK_Div1);
//  RCC_PCLK1Config(RCC_HCLK_Div2);
//  /* Flash 2 wait state */
// //  FLASH_SetLatency(FLASH_Latency_2);
//  /* Enable Prefetch Buffer */
// //  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//  RCC_PLLCmd(ENABLE);
//  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
//  {
//  }
//  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//  while(RCC_GetSYSCLKSource() != 0x08)
//  {
//  }
//  }

//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// }
void GPIO_Configuration(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);
     GPIO_SetBits(GPIOA,GPIO_Pin_8);
}
int main(void)
{
//  RCC_Configuration();
//  SystemInit();
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
     GPIO_Configuration();
     delay_init(72);  
     NVIC_Configuration();
     while(1)
     {
          GPIO_SetBits(GPIOA,GPIO_Pin_8);
          delay_ms(250);
          GPIO_ResetBits(GPIOA,GPIO_Pin_8);
          delay_ms(250);//一定要加延时
     }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-6-1 16:11:30 | 显示全部楼层
下面没看出有什么问题。最好确认下硬体。
一直努力就很好。
回复 支持 反对

使用道具 举报

4

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-5-30
在线时间
0 小时
 楼主| 发表于 2013-6-1 16:16:46 | 显示全部楼层
回复【2楼】qq942266575:
---------------------------------
能够实现灯的闪烁,不过这样写有什么不妥之处我就不知道了,还在摸索中前进啊
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-6-1 16:19:50 | 显示全部楼层
这样写没问题。最好把GPIOA的时钟使能放在GPIO init函数里面。可读高点。
一直努力就很好。
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2013-6-1 20:17:36 | 显示全部楼层
回复【楼主位】cason1991:
---------------------------------
貌似没这么复杂吧
合肥-文盲
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 07:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表