直接通过寄存器地址操作控制LED灯(定义常量标示对应寄存器)

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

直接通过地址常量对应给寄存器赋值的方式是最简捷的方式,但程序的可读性极差(不容易地址常量值得知是对应哪个寄存器),程序的可移植性差,为了提高程序的可读性和可移植性,通常预定义符号常量和符号变量。


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);


     }


}


对上述main.c程序进行如下改进:


1、在user文件夹下新建一个stm32f10x.h文件,其内容为:


#define PERIPH_BASE                ((unsigned int)0x40000000)


#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000)


#define GPIOC_BASE                            (APB2PERIPH_BASE + 0x1000)


#define GPIOC_CRL                               *(unsigned int *)(GPIOC_BASE +0x00)


#define GPIOC_CRH                              *(unsigned int *)(GPIOC_BASE +0x04)


#define GPIOC_IDR                               *(unsigned int *)(GPIOC_BASE +0x08)


#define GPIOC_ODR                              *(unsigned int *)(GPIOC_BASE +0x0C)


#define GPIOC_BSRR                            *(unsigned int *)(GPIOC_BASE +0x10)


#define GPIOC_BRR                              *(unsigned int *)(GPIOC_BASE +0x14)


#define GPIOC_LCKR                            *(unsigned int *)(GPIOC_BASE +0x08)


#define AHBPERIPH_BASE         (PERIPH_BASE + 0x00020000)


#define RCC_BASE                                (AHBPERIPH_BASE + 0x1000)


#define RCC_APB2ENR                         *(unsigned int *)(RCC_BASE + 0x18)


定义这些标示符后,可以通过对GPIOC_CRL等表示符直接赋值给相应寄存器。


2、在main.c中包含上述头文件,并使用对应表示符操作寄存器


#include "stm32f10x.h"


void SystemInit()


{


}


void delay(int t)


{


     int i;


     for( ;t>0; t--)


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


}


int main()


{


    


     RCC_APB2ENR |= 0x1<<4;      //开启GPIOC时钟


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


     GPIOC_CRL |= (0x03<<(4*0));


     while(1)


     {


         GPIOC_BSRR |= 0x01<<(16+0); //对GPIOC_0复位


         delay(1000);


         GPIOC_BSRR |= 0x01<<(0+0);  //对GPIOC_0置位


         delay(1000);


     }


}


这种方式下,通过标示符可以知道对应哪个寄存器,方便编程和程序阅读。



关键字:寄存器地址  操作控制  LED灯  常量 引用地址:直接通过寄存器地址操作控制LED灯(定义常量标示对应寄存器)

上一篇:使用STM32固件库操作控制LED灯(CMSIS)(STM32_03)
下一篇:直接通过寄存器地址操作控制LED灯(STM32_01)

推荐阅读最新更新时间:2024-10-29 12:33

NCP3065组成的LED灯泡电路
安森美半导体的降压-升压型NCP3065开关稳压器采用针对AC-DC转换的桥式整流器,具有宽输入和输出工作电压、稳定的输出电流。NCP3065可配置为降压-升压满足输入电压与输出电压有交叠的要求,并有开路和短路led保护功能,可通过12 Vac电子变压器/墙壁调光器调光。NCP3065的内部参考电压微调至2%,从而在即便是输入电压、LED正向电压和电感容限的宽变化范围下,都能提供极精确稳定的电流。NCP3065组成的 LED灯泡电路 :  
[电源管理]
NCP3065组成的<font color='red'>LED灯</font>泡电路
无电解电容驱动器让LED灯寿命更长
  免除电解与电容的可调光发光二极体( LED ) 驱动 器开始在市场上崭露头角。在技术获得重大突破下,近期无电解及电容的可调光 LED驱动 器方案已竞相出笼,将有助进一步提高 LED灯具 使用寿命和缩减LED驱动器整体物料清单(BOM)成本。   快捷技术行销总监严宗福表示,无电解与电容可调光LED驱动器不仅可提高使用寿命与效率,还可降低LED驱动器的尺寸与成本。   快捷(Fairchild)技术行销总监严宗福表示,随着各国禁用与禁产白炽灯法令陆续生效,可望带动30瓦以下 LED灯 泡取代传统白炽灯与卤素灯的需求;为增加LED灯泡的使用寿命与效率,LED灯具系统开发商纷纷要求,LED驱动器须符合国际电工委员会(IEC)谐波
[电源管理]
传统照明仍占据主导 LED灯市场渗透率不足一成
  照明行业经过2007-2008两年辉煌期,尤其是2008年底,在江西各县城当地各大县城灯饰店生意很旺,省会生意就更加旺盛,县级经销商到市级经销商拿货,市级经销商到省会总代拿货,一派繁忙景象。如果是在2008年进入灯饰行业的灯具经销商,刚好赶上最辉煌时期,当时建材市场上不少灯具经销商表示,当年经济危机主要影响在国外,对我们国内市场影响不大。   但是到了2009年,这种旺季状况就慢慢开始消退,转而进入萧条。进入萧条时期,行业会慢慢进入洗牌期,但是这个过程非常缓慢。   艰难的三年   2009年年底,在福建福州、江西南昌各建材市场做了一次深入调研,当时很多灯具经销商是没有赚到钱的,只有经过几年沉淀,积累了不少人气的零
[电源管理]
基于μC/OS-II嵌入式操作系统的TCSC实验控制器前置单元设计
可控串联补偿( TCSC) 是柔性交流输电系统( FACTS)概念提出后的第一个FACTS装置。由于TCSC直接串入输电线路,可以连续、快速、大范围地调节线路阻抗(本身的阻抗从容性到感性变化) ,和其自身的数据采集与监控( SCADA)系统相配合,可以实现远方阻抗和功率潮流调节,平息地区性功率振荡,提高系统暂态稳定性,抑制次同步谐振。本文通过一个在研项目——福建-华东电网互联的可控串补研究,详细介绍了可控串联补偿( TCSC)实验控制器的前置单元部分设计,以便于为实际决策提供完整准确的实验数据。 TCSC的稳态特性分析电路模型 TCSC的基本结构是固定的串补电容C并联一个由双向晶闸管(实际也可把两个单向晶闸管并联反接在一起
[嵌入式]
51单片机:独立按键控制LED灯
1. 独立按键控制LED灯状态 亮灭实验完成后,就可以控制LED状态,首先我们知道由于机械结构的弹性作用,按键开关在闭合时不会一瞬间稳定的接通,在断开时,也不会一下子断开。所以就得需要程序消抖,也就是适当延时,程序如下 #include reg52.h //定义LED灯 sbit LED1 = P2^0; sbit LED2 = P2^1; sbit LED3 = P2^2; sbit LED4 = P2^3; sbit LED5 = P2^4; sbit LED6 = P2^5; sbit LED7 = P2^6; sbit LED8 = P2^7; //定义独立按键 sbit KEY1 = P3^1; //需要
[单片机]
51单片机:独立按键<font color='red'>控制</font><font color='red'>LED灯</font>
分享LED灯珠使用过程中的注意事项
  A、 led LAMP使用注意事项   1、焊接条件:(焊点需离树脂根部2mm以上)   ◆浸焊:请在260℃、5秒以内焊接1次完成,同时避免树脂浸入锡槽。   ◆烙铁:用30W的烙铁,其尖端温度不高于350℃,在5秒以内焊接1次完成。   焊接时请勿在产品上施加外力。注意避免LED引脚遭受腐蚀或变色,否则会造成焊接困难,建议尽早及时使用。   2、使用注意:   ◆引脚成形必须在焊接前完成,电路版上的安装孔之间的距离请与电极引脚保持一致。   ◆产品在高温状态下进行引脚裁切会产生不良,请在常温下进行引脚裁切。   ◆在焊接温度回到正常以前,必须避免使LED受到任何的震动或外力。   3、静电防护   高 亮度 蓝
[电源管理]
寄存器名称和地址的映射分析
首先要清楚的一点,所有操作,最终目的都是操作寄存器 一,对比51单片机和STM32对寄存器的操作 1)51单片机: sfr P0=0x80; //关键字sfr 声明地址和名称的映射 P0=0x00; //将0x00赋值给P0口的8位(51单片机一组IO为8位) 2)STM32: GPIOA- ODR=0x00000000 //为GPIOA的ODR寄存器地址赋值0x00000000 二,以GPIOA为例说明STM32寄存器和名称的映射: GPIOA下的某个寄存器,挂载在GPIOA下,地址为GPIOA基地址+偏移量 GPIOA挂载在APB2总线,地址为APB2总线基地址+GPIOA偏移
[单片机]
<font color='red'>寄存器</font>名称和<font color='red'>地址</font>的映射分析
汽车照明串联LED灯珠的开路保护方案
LED 汽车照明 灯种类繁多,主要分为内部照明和外部照明两大类。在介绍方案之前,我们得清楚的知道 汽车照明 到底有哪些?细分如下: 1. 内部照明: 背光,调光,集成HMI   2. 外部照明:前照灯,日间行驶灯(DRL),雾灯(FOG),转向灯(TI),装饰灯,位置灯(POS),远近光灯(HLB),角灯(CRN)   3. 通信支持:SPI/I?C, LIN ,CANBUS   内部照明控制台设计参考:   1. 电容传感按钮用于功能选择   2. 每个按钮均具有RGB背光和 LED 指示灯   3. 顶灯采用高亮度白光 LED   4. 整个装置采用12V电源输入和CAN/LIN总行I/O   外部照明设计难点
[汽车电子]
汽车照明串联<font color='red'>LED灯</font>珠的开路保护方案
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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