stm32点亮第一个发光二极管库函数版
- 格式:doc
- 大小:52.00 KB
- 文档页数:2
教你⽤STM32⼀步⼀步点亮led灯STM32之⼀步⼀步点亮led (2011-05-09 19:40)标签: stm32led v3.4MDK 4.12⼊门分类:stm32⼊⼿stm32以来,⼀直想快速上⼿,所以在各⼤论坛闲逛,各个达⼈的blog上学习,正所谓欲速则不达,⼼急是吃不了热⾖腐的!有⽊有?最终决定使⽤st官⽹的库开发,据⼤侠们写道使⽤库可以快速上⼿,貌似的确如此,⼀个个教程写的那么好,直接拿过来⽤就是了。
可是那么多个库,聪明的你请告诉到底选择哪⼀个啊?My God!实话实说,我被这些库折腾了个够!好吧,我最后还是承认最后⽤的是v3.4的库,是很⽅便!切⼊正题,点亮LED。
硬件:红⽜开发板,STM32F103ZET6(144封装).软件:RealView MDK 4.12stm32固件库:v3.4 附上⾃⼰整理后的库: V3.4_clean.rar根据官⽹库⾃⼰整理了下,新建了⼯程模板如下图:(主要参考⽂章《在Keil MDK+环境下使⽤STM32 V3.4库.pdf》)在KeilMDK+环境下使⽤STM32V3.4库.pdf⼊图所⽰:新建⼀个⽬录01_ProLed,建议放在英⽂路径下,避免不必要的⿇烦。
将上⾯的库v3.4解压到此⽬录,再新建⼀个project⽬录,存放⼯程。
说明:CMSIS:最底层接⼝。
StartUp:系统启动⽂件。
StdPeriph_Lib:stm32外围设备驱动⽂件。
Project:⼯程⽂件。
User:⽤户⽂件。
新建⼯程步骤:此处略去300字。
简单说明:1.core_cm3.c/core_cm3.h该⽂件是内核访问层的源⽂件和头⽂件,查看其中的代码多半是使⽤汇编语⾔编写的。
在线不甚了解。
--摘⾃《在Keil MDK+环境下使⽤STM32 V3.4库》2.stm32f10x.h该⽂件是外设访问层的头⽂件,该⽂件是最重要的头⽂件之⼀。
就像51⾥⾯的reg51.h⼀样。
STM32 LL库使用指南---By Fengzi熟悉STM32的都知道ST官方提供了非常方便好用的库函数供用户使用,多数人都使用过STM32标准外设库,STM32Cube库(即HAL库),这个LL库是什么鬼,却从来没听说过。
好吧,我承认这个名字是我自己XJB取的。
目录一、初识LL 库 (1)二、怎么使用LL库 (3)三、新建STM32LL库工程模板 (5)四、第一个程序——点亮LED (8)五、添加其他程序功能 (10)………………………………………………………………………………………………………………………………………………….一、初识LL 库最近论坛发的STM32L476RG Nucleo开发板到手了,准备学习玩耍,当然第一步就是下载资料,于是我下载STM32L4Cube 1.1.0版本,打开逐个查看,好像和以前一样的,没什么特别嘛,于是准备开始开发。
等等,好像还真发现了有点不一样:熟悉HAL库的都知道,该库的文件几乎都是以stm32xxx_hal_xxx.h/.c命名的,为了和以前的标准库有个区分,上图中那些是什么鬼前辈说,遇到问题赶紧查手册,于是我果断打开STM32L4Cube库的说明手册(UM1884):原来这个东西叫做Low Layer APIs,作为英文渣渣表示实在不习惯洋里洋气的高大上名字,于是擅自把他叫做【STM32LL库】了(不服的你咬我啊)。
从这里看好像是说这个东东比HAL库更接近硬件,到底什么鬼,还不清楚。
但是以前好像没见过这个东西啊,就算是STM32L4Cube的1.0.0版本中都没有。
看看Cube发行历史:原来LL库是在1.1.0版本才加上的,大概意思就是:1.LL APIs是寄存器级的编程,嗯,也就是说我们常说的直接操作寄存器吧。
2.LL APIs适用于xxx等一大堆外设3.LL APIs函数全部定义为static inline函数,放在对应的头文件中,用户使用需要包含相关头文件4.参考这两个文档看看LL库文件在Cube库中的位置,有20多个文件,全部以stm32l4xx_ll_xxx.h命名:STM32Cube_FW_L4_V1.1.0\Drivers\STM32L4xx_HAL_Driver\IncSTM32L4是面向低功耗市场的,同时不失高性能,功耗和性能往往是两个矛盾的东西,ST在硬件设计上想了各种办法来实现兼顾低功耗高性能(例如各种低功耗模式,LP外设等),而在软件层面,程序也讲求效率,LL库全是直接操作寄存器,直接操作寄存器往往效率较高,而且函数定义为内联函数,调用函数时不是堆栈调用,而是直接把函数的代码嵌入到调用的地方,利于提高代码相率,我想这也是ST在STM32L4系列中推出这个直接操作寄存器的LL库的原因之一吧。
stm32电灯最简单代码在学习STM32单片机时,我们常常会选择最简单的例子进行学习和实践。
其中之一就是通过STM32实现一个简单的电灯控制,下面就是这个最简单的STM32电灯控制代码。
首先,需要在工程中添加头文件和宏定义:```#include 'stm32f10x.h'#define LED GPIO_Pin_13```其中,stm32f10x.h是STM32标准库中的头文件,GPIO_Pin_13表示LED所在引脚的编号。
然后,需要进行GPIO的初始化:```GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = LED;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);```其中,RCC_APB2PeriphClockCmd是时钟使能函数,将GPIOC的时钟开启;GPIO_InitStructure是GPIO初始化结构体,其中GPIO_Pin表示要初始化的引脚,GPIO_Mode表示引脚模式为输出模式,GPIO_Speed表示引脚速度为50MHz,GPIO_Init表示初始化。
最后,就是控制LED灯的代码:```while(1){GPIO_SetBits(GPIOC, LED); //LED亮Delay(0xFFFFF);GPIO_ResetBits(GPIOC, LED); //LED灭Delay(0xFFFFF);}```其中,GPIO_SetBits表示将LED引脚设置为高电平,GPIO_ResetBits表示将LED引脚设置为低电平,Delay是延时函数,0xFFFFF表示延时时间。
KEIL新建STM32工程并点亮LED灯Ray_Zhang 1、新建工程,保存后会弹出芯片选型对话框,如图1。
图1 新建工程芯片选型保存后弹出对话框,是否要自动建立与芯片有关的驱动。
如图2图2 建立驱动选是,会出现图3:图3 建好的工程分别加入文件,如图4,除了main文件以外,都是别人搞好的,太方便了吧。
图4 添加文件修改以后的图3变为如图5图5 修改以后的工程把所要用的库文件考到一个文件夹里面,方便以后配置,如图6,这些都头文件都不需要自己写。
图6进一步配置程序,如图7,前面不怎么注意的配置就没有标出来了图7 将要添加的库文件加到这里在最后一栏里一定要点setting,不会在下载的时候会报错,如图8图8 配置下载程序框图如果报错如图9的对话框,那说明图8没设置好。
图9 报错对话框2.程序#include "stm32f10x.h" //定义启动设置,以及所有寄存器宏定义GPIO_InitTypeDefGPIO_InitStructure;// 初始化GPIO口,定义了一个名字为GPIO_InitStructure的结构体,而此结构体相当于继承了GPIO_InitYypeDef,在下面直接继承了其字段并赋值。
u32 i=0; // 定义延时参量int main(void){SystemInit(); //系统时钟配置函数通过不同的定义来选择不同的主频这里设置是72m RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//打开功能时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO口while (1){for(i=0;i<=0x1ffff;i++);GPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//置高IO口for(i=0;i<=0x1ffff;i++);GPIO_ResetBits(GPIOA,GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//置低io口}}。
IAR for arm 4.42A 应用笔记学习stm32我选择的用的编译器IAR for arm 4.42A,因为开始用的这个吧,习惯了,我感觉,用什么编译器,都一样,程序还是要自己写的,别的东西永远是别人的,拿到自己手里,才是自己的;用IAR调stm32,我首先想到的是用stm32f103驱动一个LED,让他亮起来;接着调中断,接着调各种总线(SPI、SDIO、FSMC、UART、CAN、USB),这些会了,估计什么外围器件都能接上了。
第一章建工程点亮LED1.建工程:这里说下我怎样建的工程:点击如果错过了这个界面点Project——Creat New Project…点,取个名字就可以保存了;有了新的工程点下,保存为.C 文件;再在工程上右击——Add——Add Files..;把我们.C文件加进去;下面是最重要的一部,配置Option;右击工程,点出Option 界面;这里主要配置的几项有://General Options;//C/C++Compiler;//Linker;//Debugger;(1)Option 中的Target 选择我们所用的芯片型号;(2)C/C++Compiler中的Preprocessor输入我们的.h 文件的路径;说明:$PROJ_DIR$\带表的工程序所在的目录;在这个位置的基础上来添加我们的目录。
如:我们在E盘下建了一个文件夹(My_Project)放我们的工程;我把点.h文件放在E:\My_Project \User\inc里面,我们就可以把目录写成$PROJ_DIR$\user\inc;这样方便我的工程随便移动位置;(3)Linker下的Output设置如下:Extra Output设置如下:Config设置如下:说明:这个xcl是我们的flash配置文件,IAR4.42用的xcl文件,高版本的IAR已改为.icf文件,作用是一样的,加载进去就行;(4)Debugger中的Setup先择所用的调试工具,选上run to main;Download中有一项。
新建基于STM32F10X系统固件库的MDK5的工程模板1.在自己电脑上合适的盘符上新建一个”库函数工程模板”文件夹, 这个根据个人习惯哈,你也可以建立你喜欢的文件夹.2.在”库函数工程模板”文件夹里面建立CORE,PROJECT,STM32_FWLIB,USER四个文件夹.如下图其中,CORE文件夹用来存放核心文件和启动文件, STM32_FWLIB文件夹用来存放ST公司官方提供的库函数源码文件,USER文件夹用来存放主函数文件main.c,以及system_stm32f10x.c,system_stm32f10x.h,stm32f10x_it.h,stm32f10x_it.c,stm32f10x.h,stm32f10x_conf.h文件,PROJECT文件夹主要是用来存放工程文件。
3.把官方固件库“STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver”下面的src和inc二个文件夹复制到STM32_FWLIB文件夹下,如下图:其中,src文件夹存放的固件库的“.C”文件,而inc文件夹是存放的是对应的“.H”头文件。
4.把官方固件库相关文件与启动文件复制到CORE文件夹里。
把官方固件库“\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport”下面的core_cm3.c和core_cm3.h复制到CORE文件夹下,把“STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startu p\arm”下面的startup_stm32f10x_ld.s启动文件复制到CORE文件夹下面,如下图:说明:我们用的STM32F103R6芯片,芯片的FLASH是32K,是小容量芯片,所以启动文件用”startup_stm32f10x_ld.s”若用其它容量芯片,可以用”startup_stm32f10x_md.s”或”startup_stm32f10x_hd.s”5.把官方固件库“STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ ST\STM32F10x”下面的三个文件“stm32f10x.h””system_stm32f10x.c””system_stm32f10x.h”复制到目录USER下面,在把“STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_ Template”文件夹下面的“stm32f10x_conf.h”,“stm32f10x_it.c”和“stm32f10x_it.h”三个文件也复制到USER文件夹下。
stm32单片机设计定时器中断实现1s的led灯闪烁知识应用要实现1s的LED灯闪烁,可以使用STM32单片机的定时器中断来控制LED的开关。
以下是实现的步骤:1. 配置定时器:选择一个定时器(如TIM2)并设置适当的预分频和计数值,以实现1s的定时周期。
2. 配置中断:使能定时器中断,并将中断优先级设置为适当的值(较高优先级)。
3. 初始化LED引脚:将LED引脚设置为输出,并初始化为高电平(LED关闭)。
4. 编写中断处理程序:在中断处理程序(如TIM2_IRQHandler)中,切换LED引脚的状态。
例如,如果LED引脚当前为高电平,则将其设置为低电平,反之亦然。
5. 启动定时器:启动定时器以开始定时。
整个步骤如下所示的代码示例:```c#include "stm32fxx.h"void TIM2_IRQHandler(void){if(TIM2->SR & TIM_SR_UIF){TIM2->SR &= ~TIM_SR_UIF; // 清除中断标志位// 切换LED引脚状态if(GPIOC->ODR & GPIO_ODR_ODR0)GPIOC->ODR &= ~GPIO_ODR_ODR0; // 关闭LEDelseGPIOC->ODR |= GPIO_ODR_ODR0; // 打开LED}}int main(){// 初始化LED引脚RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; // 使能GPIOC时钟GPIOC->MODER |= GPIO_MODER_MODER0_0; // 将PC0设置为输出模式GPIOC->OSPEEDR |= GPIO_OSPEEDR_OSPEED0; // 设置PC0输出速度// 配置定时器RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 使能TIM2时钟TIM2->PSC = 8399; // 将预分频设置为8400-1,得到10kHz 的计数频率TIM2->ARR = 9999; // 将计数值设置为10000-1,得到1s的定时周期// 配置中断TIM2->DIER |= TIM_DIER_UIE; // 使能更新中断NVIC_EnableIRQ(TIM2_IRQn); // 使能TIM2中断NVIC_SetPriority(TIM2_IRQn, 0); // 设置TIM2中断优先级为最高// 启动定时器TIM2->CR1 |= TIM_CR1_CEN; // 启动TIM2定时器while(1){// 程序主循环}return 0;}```以上代码使用了TIM2定时器和PC0引脚作为LED灯的控制。
新概念51单片机C语言教程----入门、提高、开发、拓展全攻略郭天祥编著电子工业出版社例2.2.1编写程序,点亮第一个发光二极管(part2_1.c P27)#include <reg52.h> //52系列单片机头文件sbit led1=P1^0; //声明单片机P1口的第一位void main() //主函数{led1=0; /*点亮第一个发光二极管*/}例2.2.2编写程序,点亮P1口的若干二极管(part2_2.c P39)#include <reg52.h> //52系列单片机头文件void main() //主函数{P1=0xaa;//while(1);}例2.5.1利用for语句延时特性,编写第一个发光二极管以间隔1S亮灭闪动的程序(part2_3.c P42)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位uint i,j;void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);led1=1; /*关闭第一个发光二极管*/for(i=1000;i>0;i--) //延时for(j=110;j>0;j--);}}- 2 - 例2.6.1编写程序使第一个发光二极管以间隔500ms亮灭闪动。
(part2_4.c P48)#include <reg52.h> //52系列单片机头文件#define uint unsigned int //宏定义sbit led1=P1^0; //声明单片机P1口的第一位void delay1s(); //声明子函数void main() //主函数{while(1) //大循环{led1=0; /*点亮第一个发光二极管*/delay1s(); //调用延时子函数led1=1; /*关闭第一个发光二极管*/delay1s(); //调用延时子函数}}void delay1s() //子函数体{uint i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}例2.7.1编写程序使第一个二极管以亮200ms、灭800ms的方式闪动。
Stm32F103系列CPU驱动LED发光二极管一、利用Keil软件来新建STM32工程APP文件里放Main.c主函数和Stm32f10x_it.c中断函数StdPeriph_Driver文件里放inc和src标准库函数CMSIS文件里放M3内核功能函数 core__cm3.c,系统源文件 System_stm32f10x.cRVMDK文件里放STM32启动文件startup_stm32f10x_hd.s二、配置相关信息在target设置里才C/C++选项里填写相关信息USE_STDPERIPH_DRIVER, STM32F10X_HD在Include Paths里把相关路径关联好。
三、经过以上步骤STM32的工程就建立好了,可以编译下没有错误,说明配置好了。
四、LED发光二极管程序编写及仿真main(void)//主函数{GPIO_InitTypeDef GPIO_InitStruct ;//GPIO结构体RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);//时钟分配GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8;//GPIO管脚GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;//GPIO速度GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//GPIO输出方式GPIO_Init(GPIOB,&GPIO_InitStruct);//GPIO结构体初始化GPIO_SetBits(GPIOB,GPIO_Pin_8);while(1){GPIO_SetBits(GPIOB,GPIO_Pin_8);//LED灯灭 delay();//等待GPIO_ResetBits(GPIOB,GPIO_Pin_8);//LED亮 delay();//等待}}五,利用Protues8.6来模拟仿真此程序可以看出,实验结果满足要求。
实用文档LED跑马灯实验修改记录版本号. 作者描述修改日期0.1 徐珊First Draft 2011-9-14审核记录职务签字日期标题文档编号版本页文档名 1.0 2 of 29LED跑马灯1.1实验介绍GPIO即通用可编程输入输出口,在此我们通过GPIO编程实现一个跑马灯的实验。
该跑马灯实验是最简单,也是一般最先开始的一个实验,它可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。
所有的 GPIO 操作都是以跑马灯为基础进行的。
1.2实验目标1. 理解固件库的结构2. 分析和学习固件库3. 灵活运用 GPIO1.3实验时间60分钟1.4预备知识熟悉C语言知识,熟练MDK的使用1.5实验步骤1.解压stm32f10x_stdperiph_lib.zip可以从ST官方免费下载。
本教程使用的标准库版本为 3.1.22.创建一个GPIO文件夹标题文档编号版本页文档名 1.0 3 of 292.1 新建子文件夹User,用于存放用户源程序2.2 新建子文件夹Project,用户KEIL工程文件2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。
3. 复制源代码到GPIO文件夹3.1 将stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.1.2\Libraries文件夹和Utilities文件夹整体复制到GPIO文件夹下。
这就是ST的标准库,是以源代码形式提供的。
3.2 将库中的演示代码\GPIO\labsolutions\4GPIO_fuction\User中的文件复制到GPIO\User 文件夹.4. 新建Keil MDK工程标题文档编号版本页文档名 1.0 4 of 29标题文档编号 版本 页文档名1.0 5 of 294.1 启动Keil MDK ,点击菜单 New uVision Project ,新建一个工程,命名为GPIO4.2 选择CPU类型为 STM32F107VC (这是MDV-STM32-107开发板采用的CPU类型)4.3 当提示是否复制启动代码时,请选择否。
stm32点亮led灯控制电路方案设计STM32是一款由STMicroelectronics推出的32位微控制器。
它具有高性能、低功耗和丰富的外设集成特点,被广泛应用于各种嵌入式系统中。
在本文中,将介绍如何设计一个基于STM32的LED灯控制电路方案。
LED灯是一种常见的光源,它具有寿命长、能耗低、工作稳定等优点。
在嵌入式系统中,我们经常需要控制LED灯的亮灭状态。
通过连接STM32微控制器和LED灯,我们可以实现LED灯的控制。
下面是一个基本的LED灯控制电路方案设计。
我们需要选择合适的STM32微控制器。
根据需求,我们可以选择不同型号的STM32微控制器。
例如,如果需要较高性能的控制,可以选择STM32F4系列微控制器。
如果需要较低功耗的控制,可以选择STM32L系列微控制器。
根据具体需求选择微控制器型号后,就可以开始设计电路了。
LED灯一般需要较小的电流和电压才能正常工作。
因此,为了保护LED灯和STM32微控制器,我们需要添加合适的电阻和电源电路。
通常,我们可以通过串联一个合适的限流电阻来限制电流,以防止LED灯过电流损坏。
在连接电源电路时,我们可以使用外部电源供电,或者利用STM32微控制器的引脚输出电压。
在硬件设计方面,我们需要将LED灯连接到STM32微控制器的一个GPIO引脚上。
通过控制该引脚的输出状态,我们可以控制LED灯的亮灭状态。
在代码编写方面,我们可以使用STM32的开发环境(例如Keil或STM32Cube)来编写代码。
在代码中,我们需要初始化GPIO引脚,设置为输出模式,并控制引脚的电平。
例如,通过将引脚设置为低电平,LED灯熄灭;通过将引脚设置为高电平,LED灯点亮。
为了增加LED灯的可变性,我们还可以添加一些外设,例如按钮或蜂鸣器。
通过连接按钮,我们可以实现LED灯的开关功能。
通过连接蜂鸣器,我们可以在特定条件下发出声音提示。
通过编写代码,我们可以监听按钮输入状态,并相应地控制LED灯或蜂鸣器发出声音。
STM32--数码管显⽰使⽤STM32 – 数码管显⽰简介1.硬件部分STM32F103C8T6 最⼩系统板 ⼀位共阴数码管2.软件部分Keil软件编程 数码管码表硬件部分数码管简介数码管,也称作辉光管,是⼀种可以显⽰数字和其他信息的电⼦设备。
玻璃管中包括⼀个⾦属丝⽹制成的阳极和多个阴极。
⼤部分数码管阴极的形状为数字。
管中充以低压⽓体,通常⼤部分为氖加上⼀些汞和/或氩。
给某⼀个阴极充电,数码管就会发出颜⾊光,视乎管内的⽓体⽽定,⼀般都是橙⾊或绿⾊。
分类数码管也称LED数码管,不同⾏业⼈⼠对数码管的称呼不⼀样,其实都是同样的产品。
按发光⼆极管单元连接⽅式可分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光⼆极管的阳极接到⼀起形成公共阳极(COM)的数码管,共阳数码管在应⽤时应将公共极COM接到+5V,当某⼀字段发光⼆极管的阴极为低电平时,相应字段就点亮,当某⼀字段的阴极为⾼电平时,相应字段就不亮。
共阴数码管是指将所有发光⼆极管的阴极接到⼀起形成公共阴极(COM)的数码管,共阴数码管在应⽤时应将公共极COM接到地线GND上,当某⼀字段发光⼆极管的阳极为⾼电平时,相应字段就点亮,当某⼀字段的阳极为低电平时,相应字段就不亮。
1.共阳数码管共阳数码管在应⽤时应将公共极COM接到+5V,当某⼀字段发光⼆极管的阴极为低电平时,相应字段就点亮,当某⼀字段的阴极为⾼电平时,相应字段就不亮。
2.共阴数码管对于共阴极数码管来说,当某个发光⼆极管的阳极为⾼电平时,发光⼆极管点亮,相应的段被显⽰。
同样,共阳极数码管的阳极连接在⼀起,公共阳极接+5V,当某个发光⼆极管的阴极接低电平时,该发光⼆极管被点亮,相应的段被显⽰数码管码表unsigned char code smgduan[17] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//共阳数码管unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};共阴数码管静态数码管硬件电路设计实物软件部分/*********************************************************************** ⽂件名:smg.c* 描述:smg 应⽤函数库* 硬件连接:-----------------* | PA0 - A |* | PA1 - B |* | PA2 - C |* | PA3 - D |* | PA4 - E |* | PA5 - F |* | PA6 - G |* | PA7 - DP |* -----------------*********************************************************************/#include "smg.h"#include "delay.h"//共阳数码管断码表u8 const smg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/** 函数名:SMG_GPIO_Config* 描述:配置数码管⽤到的I/O⼝* 输⼊:⽆* 输出:⽆*/void SMG_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); // turn o ff all led}/** 函数名:SMG_Display* 描述:驱动数码管显⽰0-F* 输⼊:⽆* 输出:⽆*/void SMG_Display(void){u8 i;for(i=0;i<16;i++){GPIO_Write(GPIOA,smg_data[i]);delay_ms(1000);}}void Display_N(u8 N){GPIO_Write(GPIOA,smg_data[N]);}smg.h#ifndef __SMG_H#define __SMG_H#include "stm32f10x.h"void SMG_GPIO_Config(void);void SMG_Display(void);void Display_N(u8 N);#endif /* __SMG_H */数码管案例(基于51单⽚机四位数码管模块(74HC595))14脚:DS(SER),串⾏数据输⼊引脚13脚:OE, 输出使能控制脚,它是低电才使能输出,所以接GND12脚:RCK,存储寄存器时钟输⼊引脚。
实验一:一个灯的闪烁一、实验要求1.熟悉使用STM32F103ZET6开发板2.利用C语言程序实现一个灯闪烁二、电路原理图图1-1 LED灯硬件连接图三、软件分析1.本实验用到以下3个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init();2.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA3.声明GPIO结构: PF6~PF10口配置为输出GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;4.应用GPIO口:点亮LED1有五种方法①ODR寄存器法:GPIOA->ODR=0xffbf;②位设置/清除寄存器法:GPIOA->BRR|=0X001;③方法③只适用于GPIOx_BSRR寄存器④GPIO_WriteBit()函数法:GPIO_Write(0xffbf);⑤置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);5.主函数程序:int main(void){RCC_Configuration(); /* 配置系统时钟 */GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;;){GPIOF->ODR = 0xfeff; /* PF8=0 --> 点亮D3 */Delay(600000);GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */Delay(600000);}}四、实验现象下载程序后开发板上的LED1灯闪烁五、总结通过对本实验可以发现,和51等8位单片机相比,STM32对I/O端口的操作变得复杂了许多。