跑马灯实验

风流意气都作罢 提交于 2019-12-03 15:01:48

一、实验目的

控制开发板上的两个LED实现类似跑马灯的效果;

通过该实验,可以初步掌握STM32基本I/O口的使用。

二、STM32的I/O口可以由软件配置成8种模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能、开漏复用功能。

三、STM32的I/O端口寄存器

 

 1、每个端口I/O端口都有7个寄存器

 分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;

                一个32位的置位/复位寄存器BSRR;

                一个16位的复位寄存器BRR;

                一个32位的锁存寄存器LCKR;

主要学习一些常用的寄存器,即CRL、CRH、IDR、ODR。

2、CRH和CRL作用完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8位输出口。

      实例:比如我们要设置 PORTC 11 位为上拉输入, 12 位为推挽输出。代码如下:

GPIOC->CRH&=0XFFF00FFF; //清掉这 2 个位原来的设置,同时也不影响其他位的设置
GPIOC->CRH|=0X00038000; //PC11 输入, PC12 输出
GPIOC->ODR=1<<11; //PC11 上拉

通过这三句话,设置了PC11为上拉输入,PC12为推挽输出。

3、IDR是一个端口输入数据寄存器,只用了低16位。

4、ODR是一个端口输出数据寄存器,也只用了低16位。

5、led.c文件代码:

#include "led.h"
//初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟
//LED IO 初始化
void LED_Init(void)
{
RCC->APB2ENR|=1<<3; //使能 PORTB 时钟
RCC->APB2ENR|=1<<6; //使能 PORTE 时钟
GPIOB->CRL&=0XFF0FFFFF;
GPIOB->CRL|=0X00300000;//PB.5 推挽输出
GPIOB->ODR|=1<<5; //PB.5 输出高
GPIOE->CRL&=0XFF0FFFFF;
GPIOE->CRL|=0X00300000;//PE.5 推挽输出
GPIOE->ODR|=1<<5; //PE.5 输出高
}

6、led.h文件代码:

#ifndef __LED_H#define __LED_H#include "sys.h"//LED 端口定义#define LED0 PAout(8) // PA8#define LED1 PDout(2) // PD2void LED_Init(void);  //初始化#endif
   

7、main函数代码:

#include "sys.h"
#include "delay.h"
#include "led.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与 LED 连接的硬件接口
while(1)
{
LED0=0;
LED1=1;
delay_ms(300);
LED0=1;
LED1=0;
delay_ms(300);
}
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!