OpenEdv-开源电子网

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

STM32F1编写库函数版本的跑马灯实验

[复制链接]

28

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2019-10-16
在线时间
18 小时
发表于 2019-10-19 21:15:42 | 显示全部楼层 |阅读模式
本帖最后由 e芯凌 于 2019-11-10 22:07 编辑

首先得要知道开发板的两个LED灯连接的IO口:根据原理图两个LED分别接的是PE5和PB5.
led.PNG

整体操作思路

1:使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();不同的IO组,调用的时钟使能函数不一样。
2:初始化IO口模式。调用函数GPIO_Init();
:3:操作IO口,输出高低电平。
    GPIO_SetBits();
    GPIO_ResetBits();

各个代码块详解:
1个初始化函数:   
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);        
作用:初始化一个或者多个IO口(同一组)的工作方式和速度。            
  该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器   GPIOx: GPIOA~GPIOG
typedef struct
   {
     uint16_t GPIO_Pin;                           //指定要初始化的IO         
   GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
   GPIOMode_TypeDef GPIO_Mode;    //设置工作模式:8种中的一个
  }GPIO_InitTypeDef;
注意:外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟。

GPIO_Init函数初始化样例:   
GPIO_InitTypeDef  GPIO_InitStructure;           
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED0-->PB.5 端口配置  
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;  //推挽输出  
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; //IO口速度为50MHz  
GPIO_Init(GPIOB, &GPIO_InitStructure);      //根据设定参数初始化GPIOB.5

void GPIO_SetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器
void GPIO_ResetBits(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。

最后的编辑完成的代码:

led.h头文件里的代码
  1. #ifndef __LED_H
  2. #define __LED_H

  3. void LED_Init(void);


  4. #endif
复制代码
led.c源文件里的代码
  1. #include "led.h"
  2. #include "stm32f10x.h"

  3. void LED_Init(void)
  4. {
  5.         GPIO_InitTypeDef GPIO_InitStructure;
  6.         
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);//使能GPIOA和GPIOB
  8.                                                                                                                                                                                                                                                                                                          //| 既是逻辑运算符也是位运算符;|| 只是逻辑运算符
  9.                                                                                                                                                                                                                                                                                                                 //| 不具有短路效果,即左边true,右边还会执行;
  10.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  11.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  12.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  13.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  14.   GPIO_SetBits(GPIOB,GPIO_Pin_5);        
  15.         
  16.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  17.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
  18.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  19.         GPIO_Init(GPIOE,&GPIO_InitStructure);        
  20.   GPIO_SetBits(GPIOE,GPIO_Pin_5);               
  21. }
复制代码
main.c里的代码
  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "delay.h"

  4. int main()
  5. {
  6. delay_init();//要先初始化,不然会出错
  7. LED_Init();        
  8. while(1)
  9. {
  10.         GPIO_SetBits(GPIOB,GPIO_Pin_5);        //输出高电平
  11.         GPIO_SetBits(GPIOE,GPIO_Pin_5);
  12.         delay_ms(500);

  13.         GPIO_ResetBits(GPIOB,GPIO_Pin_5);        //输出低电平
  14.         GPIO_ResetBits(GPIOE,GPIO_Pin_5);
  15.         delay_ms(500);        
  16. }        
  17.         
  18. }
复制代码


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

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2021-9-7
在线时间
7 小时
发表于 2021-11-7 21:37:33 | 显示全部楼层
您好,请问一下为什么我按照这样写完了程序,烧写后
LED灯是交替闪烁而不像视频中的同时亮灭?
回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2021-11-10 14:02:45 | 显示全部楼层
1052206258 发表于 2021-11-7 21:37
您好,请问一下为什么我按照这样写完了程序,烧写后
LED灯是交替闪烁而不像视频中的同时亮灭?

不可能吧,PB5和PE5同时高电平,延时500毫秒,然后同时低电平,然后在延时500毫秒,2个灯同时亮再同时灭呀,
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 05:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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