STM32流水灯(基于库函数)

发布者:trendsetter9最新更新时间:2019-10-21 来源: eefocus关键字:STM32  流水灯  库函数 手机看文章 扫描二维码
随时随地手机看文章

硬件连接

参考原理图,会看原理图,使用搜索功能[A1] ,知道标号作用[A2] ,流水灯原理[A3] 。


战舰版本        LED0=PB5     LED1=PE5

迷你版本        LED0=PA8    LED1=PD2

RCT6版本      LED1=PA7    LED2=PA6    LED3=PA5    LED4=PA4


GPIO库函数

初始化函数 1个初始化函数 :

void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypedef*GPIO_InitStruct);


两个读取输入电平函数:

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);


uint16_t GPIO_ReadInputData(GPIO_TypeDef*GPIOx);


两个读取输出电平函数:

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);


uint16_t GPIO_ReadOutputData(GPIO_TypeDef*GPIOx);


四个设置输出电平函数:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);


void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);


void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);


操作过程

复制或者是新建一个工程模板到一个地方,然后新建一个hardware,并且在复制的工程中也新建一个hardware,然后在hardware里面建立一些子文件夹,并在LED下面建立LED.C和LED.H。

 


LED.C程序代码书写

#include "led.h"

//初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟

//LED IO 初始化

void LED_Init(void)


{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|

RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟

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;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出

GPIO_Init(GPIOE, &GPIO_InitStructure);

GPIO_SetBits(GPIOE,GPIO_Pin_5);/ /PE.5 输出高

}



该代码里面就包含了一个函数 void LED_Init(void),该函数的功能就是用来实现配置 PB5和 PE5 为推挽输出。 这里需要注意的是: 在配置 STM32 外设的时候,任何时候都要先使能该外设的时钟。 GPIO 是挂载在 APB2 总线上的外设, 在固件库中对挂载在 APB2 总线上的外设时钟使能是通过函数 RCC_APB2PeriphClockCmd()来实现的。


LED.h程序代码书写

#ifndef __LED_H


#define __LED_H

#include "sys.h"

//LED 端口定义

#define LED0 PBout(5)// DS0

#define LED1 PEout(5)// DS1

void LED_Init(void);//初始化

#endif


PS:务必搞清楚GPIO模式,否则这里写不出来函数也看不懂

————————————————

版权声明:本文为CSDN博主「qq_41546863」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_41546863/article/details/95218672


关键字:STM32  流水灯  库函数 引用地址:STM32流水灯(基于库函数)

上一篇:stm32入门——跑马灯(基于stm32f103zet6)
下一篇:嵌入式stm32学习之路——第一弹(led流水灯工程)

推荐阅读最新更新时间:2024-11-13 08:34

stm32中关于读取状态标志位函数的自我理解
为了让程序能够读取多个状态标志位的状态。固件设计了一个通用的函数RCC_GetStatus(),来读取各标志位的状态。 下面是RCC的所有标志位: * - RCC_FLAG_HSIRDY: HSI oscillator clock ready * - RCC_FLAG_HSERDY: HSE oscillator clock ready * - RCC_FLAG_PLLRDY: PLL clock ready * - RCC_FLAG_LSERDY: LSE oscillator clock ready *
[单片机]
PWM输出实验步骤,PWM输出代码
  脉冲宽度调制(PWM),是英文“ Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出。         CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。   CCMR1: OC1M[2:0]位:对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】、CCE
[单片机]
PWM输出实验步骤,PWM输出代码
STM32菜鸟成长记录---系统滴答定时器(systick)应用
1.systick介绍 Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。滴答中断?这里来简单地解释一下。操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 只要不把它
[单片机]
<font color='red'>STM32</font>菜鸟成长记录---系统滴答定时器(systick)应用
STM32 | 一种简单、实用的测量程序运行时间的方法
前言 平时我们可能很少去关注程序运行的时间,但是在一些情况下可能需要对程序进行一个整体的复盘、优化。 那么,程序运行的时间就是一个可以考虑的方面,可以测一下某些代码块、函数、算法的运行时间,然后整体考虑看看有没有必要进行优化。 之前在某工控类项目中,我就有接到一个任务去测试程序中关键代码的执行时间,并输出报告。当时是使用一个GPIO+示波器进行测试的,也可以使用逻辑分析仪来测。 当时测量的方法很简单: 在要测试的代码块/函数之前设置该GPIO的电平为高电平,在要测试的代码块/函数之后设置该GPIO为低电平,使用示波器测高电平的时间,就知道了这一代码块/函数的运行时间。 下面就通过实例来介绍一下这种简单而有效的方法。
[单片机]
<font color='red'>STM32</font> | 一种简单、实用的测量程序运行时间的方法
基于STM32的工业循环水极化控制系统设计
0 引言 工业生产中的循环水系统在运行中对淡水消耗非常大,同时,为防止工业设备结垢等现象,需要对循环水不断添加各种化学药剂,且需要不断地排放污水、补充新鲜水,这样既对水资源造成了很大的浪费又污染环境。鉴此,笔者设计了一种基于ARM的工业循环水极化控制系统。该系统通过极化场对水的极化作用[1],实现对工业循环水的处理功能,达到减少水资源消耗、避免使用化学药剂、有效防止水资源污染的目的。 1 系统总体设计方案 基于ARM 的工业循环水极化控制系统采用ST公司的STM32F103微控制器作为主控制核心,由极化能量检测电路实时检测循环水水质参数,经STM32F103运算处理后,由极化能量输出电路调整极化能量的输出,由LCD显示电路实时显
[单片机]
基于<font color='red'>STM32</font>的工业循环水极化控制系统设计
关于stm32的USB学习笔记之USB_HW.c
#include stm32f10x_lib.h #include stm32f10x_map.h #include usbreg.h #include usbuser.h #include usbcore.h #include usb_hw.h #define _DEBUG_ #include debug.h #define USB_EP_NUM 4 /*端点缓冲区的开始地址 *因为每个缓冲块都需要一个端点描术表 *而所有的端点描述表放在,USB缓冲区的首部 *此地址是相对于USB缓冲区的地址,我认为加上Offset更好些 *这里使用2个端点 *端点0与端点1 *此时EP_BU
[单片机]
stm32笔记:点亮一个led (精简版)
仅包含启动文件 STM32F10x.s C代码 #define GPIOA_CRL (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x00)) #define GPIOA_CRH (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x04)) #define GPIOA_IDR (*(volatile unsigned long *)(0x40000000+0x10000+0x0800+0x08)) #define GPIOA_ODR (*(volatile unsigned
[单片机]
<font color='red'>stm32</font>笔记:点亮一个led (精简版)
stm32专题三十三:RTC实时时钟
RTC功能描述 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。 系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操作。执行以下操作将使能对后备寄存器和RTC的访问: 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟; 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问; 为什么时间不能超过1秒?
[单片机]
<font color='red'>stm32</font>专题三十三:RTC实时时钟
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved