【跑马灯实验】

STM32最简单的外设莫过于IO 口的高低电平控制了,本章将通过一个经典的跑马灯程序,带大家开启 STM32F1之旅。


前言

通过本章的学习,你将了解到 STM32F1 的 IO 口作为输出使用的方法。在本章中,我们将通过代码控制 ALIENTEK 战舰 STM32 开发板上的两个 LED:DS0 和DS1 交替闪烁,实现类似跑马灯的效果。


一、STM32 IO 口简介

STM32 的 IO 口相比 51 而言要复杂得多,所以使用起来也困难很多。首先STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能

每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。STM32 的很多 IO 口都是 5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势。STM32 的每个 IO 端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口;配置寄存器CRL和CRH;2个32 位的数据寄存器 IDR 和 ODR;1个32 位的置位/复位寄存器BSRR;一个16 位的复位寄存器 BRR;1个32位的锁存寄存器 LCKR。

CRL 和 CRH 控制着每个 IO 口的模式及输出速率。

STM32 的 IO 口位配置表如表所示:

在这里插入图片描述

STM32 输出模式配置如表所示:

在这里插入图片描述

IO 操作步骤可以概括性总结为:
1) 使能 IO 口时钟。调用函数为RCC_APB2PeriphClockCmd()。
2) 初始化 IO 参数。调用函数 GPIO_Init();
3) 操作 IO。

二、硬件设计

本章用到的硬件只有 LED(DS0 和 DS1)。其电路在 ALIENTEK 战舰 STM32F103 开发板上默认是已经连接好了的。DS0 接 PB5,DS1 接 PE5。所以在硬件上不需要动任何东西。

其连接原理图如下:

在这里插入图片描述


三、软件设计

跑马灯实验我们主要用到的固件库文件是:

stm32f10x_gpio.c /stm32f10x_gpio.h
stm32f10x_rcc.c/stm32f10x_rcc.h
misc.c/ misc.h
stm32f10x_usart /stm32f10x_usart.h

其中 stm32f10x_rcc.h 头文件在每个实验中都要引入,因为系统时钟配置函数以及相关的外设时钟使能函数都在这个其源文件 stm32f10x_rcc.c 中。stm32f10x_usart.hmisc.h 头文件在我们SYSTEM 文件夹中都需要使用到,所以每个实验都会引用。

本实验所用到的主要代码如下:

led.c

int main(void)
{
  delay_init();
	LED_Init();
	
	
	while(1)
	{
		 GPIO_SetBits(GPIOB,GPIO_Pin_5);
		 GPIO_SetBits(GPIOE,GPIO_Pin_5);
		 delay_ms(500);
		
		 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		 GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		 delay_ms(500);
		
	}
}

led.h

#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5	

void LED_Init(void);

		 				    
#endif

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
 


 int main(void)
 {	
	delay_init();	      
	LED_Init();		  	
	while(1)
	{
		LED0=~LED0;
		delay_ms(300);	 
		LED1=~LED1;
		delay_ms(300);	
	}
 }

此代码,我们先进行软件仿真,看看结果对不对,根据软件仿真的结果,然后再下载到ALIENTEK 战舰 STM32 板子上面看运行是否正确。在软件仿真没有问题了之后,我们就可以把代码下载到开发板上,看看运行结果是否与我们仿真的一致。

运行结果如图所示:

在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值