×
单片机 > 单片机程序设计 > 详情

STM32入门开发--LED模块实现跑马灯

发布时间:2020-06-01 发布时间:
|

1、案例描述

利用STM32F103ZE开发板实现控制LED灯实现跑马灯现象。

正在不断学习嵌入式开发中,博客还会持续更新,敬请关注!


2、开发环境

keil 5.14 + Windows 10 + FlyMcu

参考资料:STM32参考手册


3、实现原理

A.根据硬件接口图:



由接口图发现,开发板上面的两个LED分别接在PB5,和PE5接口处。即我们可以操作GPIO口的寄存器从而操作GPIO端口的控制器。



B、初始化(使能)PB,PE端口,查找手册发现端口PB,PE分别由APB2ENR端口的第三位和第六位控制。我们就将该位置1,其他位不变(|=操作)

APB2ENR:外设时钟使能寄存器



C、配置GPIOx端口




首先将PB5对应的20-23位清0,设置为输入模式,清0(&=操作)

其次配置LED对应的GPIOB和GPIOE端口为推挽输出,即通用推挽输出即00,输出模式速度根据实际情况定义,我这里为50MHz,即11,由于GPIOB_CRL为32位,即20-23位应设置为0011 = 3,其他位不变

PE5端口和PB5端口设置一样。


led.c:

void led_init()

{

  // 由结构图可知,LED0接在PB5,LED1接在PE5

// RCC_APB2ENR  APB2外设时钟使能寄存器

  RCC->APB2ENR |= 1<<3; // 设置第三位,即使能IOPB

RCC->APB2ENR |= 1<<6; // 设置第六位,即使能IOPE


// 端口配置低寄存器 GPIOx_CRL 32位

GPIOB->CRL &= 0XFF0FFFFF; // 设置第23-20位为0 ,即设置在输入模式

GPIOB->CRL |= 0X00300000;      // 设置第23-22位为00 设置第21-20位为11

//  推挽输出,最大速度50MHz

// ODR 端口数据输出寄存器

GPIOB->ODR = 1<<5;       // 使能ODR5,由于LED灯分别接在PB5,PE5,所以要由ODR5输出



GPIOE->CRL &= 0XFF0FFFFF;

GPIOE->CRL |= 0X00300000;

GPIOE->ODR = 1<<5;

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项