基于STM32单片机流水灯仿真与程序设计

您所在的位置:网站首页 stm32f103R6仿真可以不加复位吗 基于STM32单片机流水灯仿真与程序设计

基于STM32单片机流水灯仿真与程序设计

#基于STM32单片机流水灯仿真与程序设计| 来源: 网络整理| 查看: 265

STM32单片机流水灯仿真与程序设计 摘要

本次程序设计和仿真是基于Proteus和keil的环境对STM32F103系列单片机进行流水灯设计,通过配置STM32的GPIO工作模式,实现LED的点亮和熄灭;通过配置8位流水灯程序设计,实现灯的流水实现。

关键字:Proteus、keil、STM32F103、GPIO

一、工程介绍 1.1、实现要求

用STM32一个端口接8个发光二极管,编写程序,实现从左到右轮流点亮8个二极管(即流水灯)

二、仿真电路设计 2.1、环境介绍

仿真采用Proteus 8.9 SP2安装链接

2.2、电路设计

第一步:在Proteus中的[P]选择所需要的零件有电阻RES、LED灯LED-GREEN最后还有单片机STM32F103R6

第二步:放置STM32F103R6单片机并设置VDDA、VSSA管脚以及NRST、VBAT和BOOT0

Design->Configure Power Rails ->Power Rails

第三步:放置八个LED

为什么LED接1K的电阻,这个可以参考链接2.2.2

三、STM32单片机GPIO口介绍 3.1、GPIO框图

GPIO总体分为7个部分:

保护二极管及上、下拉电阻:保护二级管可以防止引脚外部过高或过低的电压输入P-MOS 管和N-MOS 管:控制推挽输出和开漏输出输出数据寄存器:由输出数据寄存器GPIOX_ODR复用功能输出:STM32 的其它片上外设对GPIO 引脚进行控制输入数据寄存器:存储输入数据寄存器GPIOx_IDR复用功能输入:GPIO 引脚的信号传输到STM32 其它片上外设模拟输入输出:用于ADC 采集电压的输入通道

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XYfDCpuw-1588127425742)(STM32%E5%8D%95%E7%89%87%E6%9C%BA%E6%B5%81%E6%B0%B4%E7%81%AF%E4%BB%BF%E7%9C%9F%E4%B8%8E%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1.assets/%EF%BC%A7%EF%BC%B0%EF%BC%A9%EF%BC%AF%E6%A1%86%E5%9B%BE.png)]

3.2、GPIO工作模式

GPIO 总共有8 种细分的工作模式

typedef enum { GPIO_Mode_AIN = 0x0, // 模拟输入 GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入 GPIO_Mode_IPD = 0x28, // 下拉输入 GPIO_Mode_IPU = 0x48, // 上拉输入 GPIO_Mode_Out_OD = 0x14, // 开漏输出 GPIO_Mode_Out_PP = 0x10, // 推挽输出 GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出 GPIO_Mode_AF_PP = 0x18 // 复用推挽输出 } GPIOMode_TypeDef;

稍加整理可以大致归类为以下三类:

输入模式(模拟/浮空/上拉/下拉)

在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器GPIOx_IDR 读取I/O 状态。其中输入模式,可设置为上拉、下拉、浮空和模拟输入四种。上拉和下拉 输入很好理解,默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外 部的输入决定,一般接按键的时候用的是这个模式。模拟输入则用于ADC 采集。

输出模式(推挽/开漏)

在输出模式中,推挽模式时双MOS 管以轮流方式工作,输出数据寄存器GPIOx_ODR 可控制I/O 输出高低电平。开漏模式时,只有N-MOS 管工作,输出数据寄存器可控制I/O 输出高阻态或低电平。输出速度可配置,有2MHz\10MHz\50MHz 的选项。此处的输出速 度即I/O 支持的高低电平状态最高切换频率,支持的频率越高,功耗越大,如果功耗要求 不严格,把速度设置成最大即可。 在输出模式时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR 可读取I/O 的实际状态。

复用功能(推挽/开漏)

复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出 信号源于其它外设,输出数据寄存器GPIOx_ODR 无效;输入可用,通过输入数据寄存器 可获取I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号。 通过对GPIO 寄存器写入不同的参数,就可以改变GPIO 的工作模式,再强调一下, 要了解具体寄存器时一定要查阅《STM32F10X-中文参考手册》中对应外设的寄存器说明。 在GPIO 外设中,控制端口高低控制寄存器CRH 和CRL 可以配置每个GPIO 的工作模式和 工作的速度,每4 个位控制一个IO,CRH 控制端口的高八位,CRL 控制端口的低8 位, 具体的看CRH 和CRL 的寄存器描述。

四、程序设计 4.1、环境介绍

程序设计采用MDK 5.22安装链接

4.2、移位程序设计 /****************************************************************************** * @brief Water_LED:流水灯实现 ******************************************************************************/ void Water_LED(void) { unsigned long int time = 0xFFFF; //设置软件延时时间 unsigned char Count = 0x00; //设置流水起始地址 unsigned char Stars = 0xFE; //设置流水灯初始状态 unsigned char Move = 0x01; //设置移动补偿 while((!((Count++)&0x08))) //循环实现8位流水灯 { GPIOC->ODR = Stars; //改变输出寄存器,改变端口状态 while(time--); //软件延时高电平持续实现 time = 0xFFFF; GPIOC->ODR = 0xFF; //消抖实现 Stars = (Stars


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3