直接通过寄存器地址操作控制LED灯(STM32_01)

发布者:hxcp18最新更新时间:2019-05-29 来源: eefocus关键字:寄存器地址  操作控制  LED灯 手机看文章 扫描二维码
随时随地手机看文章

一、硬件基础


1、开发板:STM32-PZ6806L


2、MCU型号:STM32F103ZET6


(1)内核:32位 高性能ARM Cortex-M3处理器。时钟:高达72M,实际还可以超频一点。单周期乘法和硬件除法。


(2)IO口:STM32F103ZET6: 144引脚  112个IO,大部分IO口都耐5V(模拟通道除外),支持调试:SWD和JTAG,SWD只要2根数据线


(3)存储器容量:512K FLASH,64K SRAM


(4)时钟,复位和电源管理:


①     2.0~3.6V电源和IO电压


②     上电复位,掉电复位和可编程的电压监控


③     强大的时钟系统


   -4~16M的外部高速晶振


   -内部8MHz的高速RC振荡器


   -内部40KHz低速RC振荡器,看门狗时钟


   -内部锁相环(PLL,倍频),一般系统时钟都是外部或者内部高速时钟经过PLL倍频后得到


   - 外部低速32.768K的晶振,主要做RTC时钟源


(5)低功耗:


    -睡眠,停止和待机三种低功耗模式


    -可用电池为RTC和备份寄存器供电


(6)AD:3个12位AD(多达21个外部测量通道)


-转换范围:0-3.6V(参考电源电压)


  -内部通道可以用于内部温度测量


  -内置参考电压


(7)DA:2个12位DA


(8)DMA:12个DMA通道(7通道DMA1,5通道DMA2),支持外设:定时器,ADC,DAC,SDIO,I2S,SPI,I2C,和USART


(9)定时器:多达11个定时器


       -4个通用定时器


       -2个基本定时器


      -2个高级定时器


       -1个系统定时器


       -2个看门狗定时器


(10)通信接口:多达13个通信接口


       -2个I2C接口


       -5个串口


       -3个SPI接口


       -1个CAN2.0


       -1个USB FS


       -1个SDIO


3、LED电路


在开发版上有8个LED灯,分别与GPIOC的0-7脚相连。



二、软件基础


1、Keil5 IDE;


2、STM32F1扩展库(STM32芯片包);


3、启动文件。startup_stm32f10x_hd.s


ld( Low-density)     小容量   16-32K          

md (Medium-density) 中容量   64-128K          

hd (High-density)      大容量   256-512K

xl                        超大容量 512-1024K


 这些都是基本型的,包括STM32F101xx, STM32F102xx 和 STM32F103xx


vl (value line devices)   超值型系列大家记住:这个只有STM32F100xx,也就是说只要是vl那一定是STM32F100的启动文件,其他的不予考虑

   下面还有个特殊的:

cl (Connectivity line devices) 互联型有STM32F105xx和STM32F107xx


启动文件负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。


(1) 初始化堆栈指针SP=_initial_sp


(2) 初始化PC指针=Reset_Handler


(3) 初始化中断向量表


(4) 配置系统时钟


(5) 调用C库函数_main 初始化用户堆栈,从而最终调用main函数


启动文件可以从STM32芯片包安装路径中获取


(Keil_v5ARMPackKeilSTM32F1xx_DFP2.1.0DeviceSourceARM)


或者从项目例程文件夹中获取。


4、程序下载软件,使用该软件通过板载USB转串口将PC端Keil5环境下编译生成的.hex文件下载到开发版的MCU中。


三、项目创建


1、新建项目文件夹;(例如:F:STM32projectregtemp)


2、通过Keil5创建新项目,保存在所创建的文件夹中;(例如项目名为:ptemp)



然后在弹出的“选择设备”文件夹中选择与开发版的MCU型号相对应的芯片。

在随后的"ManageRun-Time Environment"对话框打开后,不做选择,直接关闭。

这时Keil5的项目向导会在项目文件夹(regtemp)下生成项目文件和相应文件夹:

3、在regtemp文件夹中新建"user"文件夹,将startup_stm32f10x_hd.s启动文件复制到"user"文件夹内,在"user"文件夹内新建一个文本文件,并将其文件名改为"main.c"。



 4、在keil5的"Project"选项卡中展开"Target1",右键单击"Source Group1",选择菜单"Add Existing Files toGroup 'Source Group1'"



在打开的对话框中选择"user"文件夹内的"main.c"和"startup_stm32f10x_hd.s"文件,然后点击“Add”,将这两个源程序文件添加到当前项目中。



添加后"SourceGroup1"中包含两个文件。



5、对"main.c"编程。


通过编程控制开发板上一个LED灯亮(D1),根据电路图,就是PC1为低电平,即通过GPIOC的GPIOC_0输出低电平。实现该功能需要3个步骤:


①使能GPIOC时钟;


②设置GPIOC_0的工作模式;


③将GPIOC_0复位。


实现这些操作都是对MCU芯片内片内外设的功能寄存器操作。通过APB2外设时钟使能寄存器(RCC_APB2ENR)使能GPIOC时钟;通过GPIOC_CRL,GPIOC_CRH配置GPIOC_0的工作模式;通过GPIOC_BSRR将GPIOC_0复位,通过 GPIOC_BRR将GPIOC_0置位。


MCU中的内部外设的功能寄存器与存储器采用统一编址方式,将功能寄存器映射到固定的内存地址,STM32F103ZET6从0x40000000到0xBFFFFFFF的地址范围为内部外设功能寄存器的地址区间,RCC为0x40000000 + 0x00020000 +0x00001000,PortC为0x40000000 + 0x00010000 + 0x1000。根据STM32F1xx参考手册GPIOC_CRL的映射地址为0x40011000,GPIOC_CRH的映射地址为0x40011004,GPIOC_BSRR的映射地址为0x40011010,GPIOC_BRR的映射地址为0x40011014;


APB2外设时钟使能寄存器(RCC_APB2ENR) 的映射地址为0x40021018。


6、可以通过直接向这些地址赋值来设置MCU的内部外设的功能寄存器,从而控制它们的工作方式。



① APB2外设时钟使能寄存器(RCC_APB2ENR)的位含义:


要使能GPIOC就是将RCC_APB2ENR寄存器的第4位设为1。


② GPIOC_CRL寄存器的位含义:


如果要将GPIOC_0设为“通用推挽式输出,最大速度50MHz,则将GPIOC_CRL寄存器的3~0位设为0011。


③ GPIOC_BSRR寄存器的位含义:



如果要通过GPIOC_0输出低电平,就是将GPIOC_BSRR寄存器的位16设为1,如果要通过GPIOC_0输出高电平,就是将GPIOC_BSRR寄存器的位0设为1。


7、main.c的编程如下:


void SystemInit()


{


}


void delay(int t)


{


     int i;


     for( ;t>0; t--)


         for(i=0;i<1000;i++);


}


int main()


{


    


     *((unsigned int *)0x40021018) |= 0x1<<4;       //开启GPIOC时钟


     *((unsigned int *)0x40011000) &= ~(0x0F<<(4*0));   //对GPIOC_0设置为通用推挽输出,最大速度50MHz


     *((unsigned int *)0x40011000) |= (0x03<<(4*0));


     while(1)


     {


         *((unsigned int *)0x40011010) |= 0x01<<(16+0); //对GPIOC_0复位


         delay(1000);


         *((unsigned int *)0x40011010) |= 0x01<<(0+0);  //对GPIOC_0置位


         delay(1000);


     }


}


8、项目配置、编译链接生成hex文件


①项目配置,两种方式可以打开项目配置对话框




在"Output"选项卡中选择"Create HEX File"。


②生成目标文件



四、下载程序到开发版MCU中


打开“普中ISP自动下载”软件,按照MCU芯片选择芯片类型;按照与开发板连接的USB转串口选择串口号;选择合适的波特率;选择要下载的.hex文件(一般在项目文件夹下的"Objects"文件夹中),然后点击程序下载。



程序下载后,开发板上的第一个LED灯闪烁,数码管一段也闪烁。

关键字:寄存器地址  操作控制  LED灯 引用地址:直接通过寄存器地址操作控制LED灯(STM32_01)

上一篇:直接通过寄存器地址操作控制LED灯(定义常量标示对应寄存器)
下一篇:STM32 USB学习笔记9

推荐阅读最新更新时间:2024-11-07 20:50

51单片机程序——按键控制LED灯
#include reg52.h void Delay(unsigned int t); sbit key=P3^2; //对应单片机开发板上s19按键 void main (void) { while (1) //函数开始后,一直在检测按键是否被按下 { if(key==0) { unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 P0=0x7f; //赋初始值,右边第一个灯亮起来 for(i=0;i 8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay
[单片机]
基于嵌入式操作系统的控制系统平台设计
  1 引言   近年来,嵌入式系统在工业控制领域的应用越来越广泛。随着嵌入式控制系统的发展,嵌入式控制系统将在一定程度上取代现有的工业PC控制系统,在微型TDCS(集散控制系统)、现场总线系统、PLC控制系统、智能化仪表等领域得到广泛的应用。由于其相对于大型的TDCS系统来说具有较强的成本优势和灵活性,其应用领域正在进一步扩大。本文建立了一套完整的嵌入式控制系统软件平台,该平台建构于嵌入式硬件系统之上,包括嵌入式实时操作系统、软PLC系统、嵌入式组态软件等。   平台包括运行环境和开发环境两部分。使用开发环境,用户可以方便组态和二次开发,而将开发重点集中到具体的控制系统应用上,而诸如系统的软件架构设计、实时性保证、通用的
[嵌入式]
如何降低大功率LED灯温升
  环境问题在各国的经济发展中已成为头等重要的问题,因而节能省电的 LED照明 就成为了 照明 界的 新宠 。因为 LED 的发光效率较高、制造成本也较低,其应用前景和市场非常广大。但是, 大功率LED 灯的散热问题限制了LED照明行业的发展,散热问题得不到解决,将会使 LED灯 的温度上升,导致其发光效率降低、使用寿命缩短。本文从灯具及驱动器的设计2个方面提出降低大功率LED灯温升及温控的方法和技术,有效降低和限制了大功率LED灯的温升。    1 降低温升   目前,LED灯的散热方式主要有自然对流散热、加装风扇强制散热、热管和回路热管散热等。   1.1 电源与灯体分离   由于电源本身产生一定的
[电源管理]
如何降低大功率<font color='red'>LED灯</font>温升
用查询定时器0溢出标志位的方式实现LED灯
我来给大家一些单片机控制led灯的程序,都有详细的注释,有错误的话请大家指点。 用查询定时器0溢出标志位的方式实现LED灯闪烁。 用定时器0实现P2_0所接LED灯每60ms亮或灭一次,设系统晶振为12MHz。该例子中采用查询定时器0溢出标志位的方法,若是溢出标志位为1,则执行P2_0引脚取反的语句,使LED灯闪烁。源程序如下: //程序出自51hei单片机 #include "reg51.h" //头文件 sbit P2_0=P2^0; //定义P2_0为P2口的0引脚 void main() //主函数 {P2=0xff; //熄灭所有LED灯 TMOD=0x01; //定时器模式1,16位计数 TH0=0x15; //设
[单片机]
图解低于9美元的LED灯泡内部设计
 Great Value的自品牌 LED灯 泡产品线,将很快抵达其在美国的所有店面,最低价格不到9美元。灯泡据说由中国 灯具 供应商TCP制造,提供两种级别的亮度:800流明相当于60W和470流明相当于40W。每款灯泡都提供可调光或非调光版本,800流明可调光售价9.88美元;非调光版本是8.88美元。下面就图解可调光的800流明、相当于60W灯泡。 灯泡可调光与非调光版本的并排正视图   外包装上很难区分,唯一可区别的标识是在非可调光包装侧面的下角,灯泡的下部,见图上箭头指示。而可调光版本没有任何标识,这会让消费者在超市及买回家后都难以分辨、易混淆。包装混乱的另一个例子是:在软包装处标识“额定室内/室外封闭的灯具”(见下图
[电源管理]
图解低于9美元的<font color='red'>LED灯</font>泡内部设计
如何有效延长LED灯使用寿命
现在厂家大多宣传是5万小时的 LED灯 寿命,整灯寿命一般为3.5万小时。实际应用中要受到诸多因素影响,达不到理论值。随着 led 技术的不停进步、成本的不断下降、省电节能性能的不断提高,LED正逐渐从最初的 显示 阶段向着照明应用阶段深入,无论在国际市场还是国内市场,LED已开始进入商业照明甚或部门家用照明市场,展现出了良好的发展势头。其长寿命、高效、省电的特点已经受到越来越多的重视和研究,LED灯以及其它产品得到愈来愈广泛的应用。 但是LED灯也有一定的缺陷存在,单颗的LED灯与LED灯所组成的灯具能过检测,在老化方面还是有一定的区别的。这个区别可以从LED灯使用的环境以及其它各种参数方面进行分析,如何有效延长LED灯
[电源管理]
用PWM波控制LED灯的闪烁
用PWM控制LED灯亮3ms灭5ms,也就是说PWM的波的周期是8ms。 1s/8ms=1000ms/8ms=125次。在1s之内有125个波。 htm1.Init.Period = 1000; 这段代码的含义是每1000个小波组成一个大波,所以1ms需要125000个小波,125kHZ. 48000000/125000=383 得出: htm1.Init.Prescaler = 383; 3/8 = sConfigOC.Pulse/1000 sConfigOC.Pulse = 375; 完成LED灯亮3ms灭5ms.
[单片机]
LED灯具寿命和色保持度的指标是很高
LED灯具寿命和色保持度的指标,从目前来看是很高的,实际上很多LED灯具还达不到这个要求,因为LED灯具所涉及的技术问题很多、很复杂,其中主要是系统可靠性问题,包含LED芯片、封装器件、驱动电源模块、散热和灯具的可靠性。要有较好的机械性能和密封性,散热体还要防尘,要求LED灯具的温升应小30℃。LED灯具的设计除了要提高灯具效率、配光要求、外形美观之外,要提高散热水平,采用导热好的材料,有报道称,散热体涂上某些纳米材料,其导热性能增加30%。以下分别对这些问题进行分析: (一)LED灯具可靠性相关内容介绍 在分析LED灯具可靠性之前,先对LED可靠性有关的基本内容作些介绍,将对LED灯具可靠性的深入分析有所帮助。
[电源管理]
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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