历史上的今天
返回首页

历史上的今天

今天是:2025年03月29日(星期六)

2019年03月29日 | stm32 汇编点灯程序

2019-03-29 来源:eefocus

;RCC寄存器地址映像            

RCC_BASE            EQU    0x40021000

RCC_CR              EQU    (RCC_BASE + 0x00)

RCC_CFGR            EQU    (RCC_BASE + 0x04)

RCC_CIR             EQU    (RCC_BASE + 0x08)

RCC_APB2RSTR        EQU    (RCC_BASE + 0x0C)

RCC_APB1RSTR        EQU    (RCC_BASE + 0x10)

RCC_AHBENR          EQU    (RCC_BASE + 0x14)

RCC_APB2ENR         EQU    (RCC_BASE + 0x18)

RCC_APB1ENR         EQU    (RCC_BASE + 0x1C)

RCC_BDCR            EQU    (RCC_BASE + 0x20)

RCC_CSR             EQU    (RCC_BASE + 0x24)

                             

;AFIO寄存器地址映像           

AFIO_BASE           EQU    0x40010000

AFIO_EVCR           EQU    (AFIO_BASE + 0x00)

AFIO_MAPR           EQU    (AFIO_BASE + 0x04)

AFIO_EXTICR1        EQU    (AFIO_BASE + 0x08)

AFIO_EXTICR2        EQU    (AFIO_BASE + 0x0C)

AFIO_EXTICR3        EQU    (AFIO_BASE + 0x10)

AFIO_EXTICR4        EQU    (AFIO_BASE + 0x14)

                                                          

;GPIOA寄存器地址映像             

GPIOA_BASE          EQU    0x40010800

GPIOA_CRL           EQU    (GPIOA_BASE + 0x00)

GPIOA_CRH           EQU    (GPIOA_BASE + 0x04)

GPIOA_IDR           EQU    (GPIOA_BASE + 0x08)

GPIOA_ODR           EQU    (GPIOA_BASE + 0x0C)

GPIOA_BSRR          EQU    (GPIOA_BASE + 0x10)

GPIOA_BRR           EQU    (GPIOA_BASE + 0x14)

GPIOA_LCKR          EQU    (GPIOA_BASE + 0x18)

                                                      

;GPIO C口控制                  

GPIOC_BASE          EQU    0x40011000

GPIOC_CRL           EQU    (GPIOC_BASE + 0x00)

GPIOC_CRH           EQU    (GPIOC_BASE + 0x04)

GPIOC_IDR           EQU    (GPIOC_BASE + 0x08)

GPIOC_ODR           EQU    (GPIOC_BASE + 0x0C)

GPIOC_BSRR          EQU    (GPIOC_BASE + 0x10)

GPIOC_BRR           EQU    (GPIOC_BASE + 0x14)

GPIOC_LCKR          EQU    (GPIOC_BASE + 0x18)

                                                          

;串口1控制                      

USART1_BASE         EQU    0x40013800

USART1_SR           EQU    (USART1_BASE + 0x00)

USART1_DR           EQU    (USART1_BASE + 0x04)

USART1_BRR          EQU    (USART1_BASE + 0x08)

USART1_CR1          EQU    (USART1_BASE + 0x0c)

USART1_CR2          EQU    (USART1_BASE + 0x10)

USART1_CR3          EQU    (USART1_BASE + 0x14)

USART1_GTPR         EQU    (USART1_BASE + 0x18)

                           

;NVIC寄存器地址               

NVIC_BASE           EQU    0xE000E000

NVIC_SETEN          EQU    (NVIC_BASE + 0x0010)    

;SETENA寄存器阵列的起始地址

NVIC_IRQPRI         EQU    (NVIC_BASE + 0x0400)    

;中断优先级寄存器阵列的起始地址

NVIC_VECTTBL        EQU    (NVIC_BASE + 0x0D08)    

;向量表偏移寄存器的地址    

NVIC_AIRCR          EQU    (NVIC_BASE + 0x0D0C)    

;应用程序中断及复位控制寄存器的地址                                               

SETENA0             EQU    0xE000E100

SETENA1             EQU    0xE000E104

                           

                             

;SysTick寄存器地址           

SysTick_BASE        EQU    0xE000E010

SYSTICKCSR          EQU    (SysTick_BASE + 0x00)

SYSTICKRVR          EQU    (SysTick_BASE + 0x04)

                             

;FLASH缓冲寄存器地址映像    

FLASH_ACR           EQU    0x40022000

                            

;SCB_BASE           EQU    (SCS_BASE + 0x0D00)

                            

MSP_TOP             EQU    0x20005000              

;主堆栈起始值               

PSP_TOP             EQU    0x20004E00              

;进程堆栈起始值            

                           

BitAlias_BASE       EQU    0x22000000              

;位带别名区起始地址        

Flag1               EQU    0x20000200

b_flas              EQU    (BitAlias_BASE + (0x200*32) + (0*4))              

;位地址

b_05s               EQU    (BitAlias_BASE + (0x200*32) + (1*4))              

;位地址

DlyI                EQU    0x20000204

DlyJ                EQU    0x20000208

DlyK                EQU    0x2000020C

SysTim              EQU    0x20000210









;常数定义

Bit0                EQU    0x00000001

Bit1                EQU    0x00000002

Bit2                EQU    0x00000004

Bit3                EQU    0x00000008

Bit4                EQU    0x00000010

Bit5                EQU    0x00000020

Bit6                EQU    0x00000040

Bit7                EQU    0x00000080

Bit8                EQU    0x00000100

Bit9                EQU    0x00000200

Bit10               EQU    0x00000400

Bit11               EQU    0x00000800

Bit12               EQU    0x00001000

Bit13               EQU    0x00002000

Bit14               EQU    0x00004000

Bit15               EQU    0x00008000

Bit16               EQU    0x00010000

Bit17               EQU    0x00020000

Bit18               EQU    0x00040000

Bit19               EQU    0x00080000

Bit20               EQU    0x00100000

Bit21               EQU    0x00200000

Bit22               EQU    0x00400000

Bit23               EQU    0x00800000

Bit24               EQU    0x01000000

Bit25               EQU    0x02000000

Bit26               EQU    0x04000000

Bit27               EQU    0x08000000

Bit28               EQU    0x10000000

Bit29               EQU    0x20000000

Bit30               EQU    0x40000000

Bit31               EQU    0x80000000













;向量表

    AREA RESET, DATA, READONLY

    DCD    MSP_TOP            ;初始化主堆栈

    DCD    Start              ;复位向量

    DCD    NMI_Handler        ;NMI Handler

    DCD    HardFault_Handler  ;Hard Fault Handler

    DCD    0                  

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    0

    DCD    SysTick_Handler    ;SysTick Handler

    SPACE  20                 ;预留空间20字节









                

;代码段

    AREA |.text|, CODE, READONLY

    ;主程序开始

    ENTRY                           

    ;指示程序从这里开始执行

Start

    ;时钟系统设置

    ldr    r0, =RCC_CR

    ldr    r1, [r0]

    orr    r1, #Bit16

    str    r1, [r0]

    ;开启外部晶振使能 

    ;启动外部8M晶振

                                           

ClkOk          

    ldr    r1, [r0]

    ands   r1, #Bit17

    beq    ClkOk

    ;等待外部晶振就绪

    ldr    r1,[r0]

    orr    r1,#Bit17

    str    r1,[r0]

    ;FLASH缓冲器

    ldr    r0, =FLASH_ACR

    mov    r1, #0x00000032

    str    r1, [r0]

           

    ;设置PLL锁相环倍率为7,HSE输入不分频

    ldr    r0, =RCC_CFGR

    ldr    r1, [r0]

    orr    r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14)

    orr    r1, #Bit10

    str    r1, [r0]

    ;启动PLL锁相环

    ldr    r0, =RCC_CR

    ldr    r1, [r0]

    orr    r1, #Bit24

    str    r1, [r0]

PllOk

    ldr    r1, [r0]

    ands   r1, #Bit25

    beq    PllOk

    ;选择PLL时钟作为系统时钟

    ldr    r0, =RCC_CFGR

    ldr    r1, [r0]

    orr    r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14)

    orr    r1, #Bit10

    orr    r1, #Bit1

    str    r1, [r0]

    ;其它RCC相关设置

    ldr    r0, =RCC_APB2ENR

    mov    r1, #(Bit14 :OR: Bit4 :OR: Bit2)

    str    r1, [r0]     



    ;IO端口设置

    ldr    r0, =GPIOC_CRL

    ldr    r1, [r0]

    orr    r1, #(Bit28 :OR: Bit29)         

    ;PC.7输出模式,最大速度50MHz 

    and    r1, #(~Bit30 & ~Bit31)  

    ;PC.7通用推挽输出模式

    str    r1, [r0]

           

    ;PA9串口0发射脚

    ldr    r0, =GPIOA_CRH

    ldr    r1, [r0]

    orr    r1, #(Bit4 :OR: Bit5)         

    ;PA.9输出模式,最大速度50MHz 

    orr    r1, #Bit7

    and    r1, #~Bit6

    ;10:复用功能推挽输出模式

    str    r1, [r0]   



    ldr    r0, =USART1_BRR  

    mov    r1, #0x271

    str    r1, [r0]

    ;配置波特率-> 115200

                  

    ldr    r0, =USART1_CR1  

    mov    r1, #0x200c

    str    r1, [r0]

    ;USART模块总使能 发送与接收使能

    ;71 02 00 00   2c 20 00 00

            

    ;AFIO 参数设置            

    ;Systick 参数设置

    ldr    r0, =SYSTICKRVR          

    ;Systick装初值

    mov    r1, #9000

    str    r1, [r0]

    ldr    r0, =SYSTICKCSR          

    ;设定,启动Systick

    mov    r1, #0x03

    str    r1, [r0]

           

    ;NVIC                    

    ;ldr   r0, =SETENA0

    ;mov   r1, 0x00800000

    ;str   r1, [r0]

    ;ldr   r0, =SETENA1

    ;mov   r1, #0x00000100

    ;str   r1, [r0]

             

    ;切换成用户级线程序模式

    ldr    r0, =PSP_TOP                  

    ;初始化线程堆栈

    msr    psp, r0

    mov    r0, #3

    msr    control, r0

             

    ;初始化SRAM寄存器

    mov    r1, #0

    ldr    r0, =Flag1

    str    r1, [r0]

    ldr    r0, =DlyI

    str    r1, [r0]

    ldr    r0, =DlyJ

    str    r1, [r0]

    ldr    r0, =DlyK

    str    r1, [r0]

    ldr    r0, =SysTim

    str    r1, [r0]

              

;主循环           

main           

    ldr    r0, =Flag1

    ldr    r1, [r0]

    tst    r1, #Bit1                

    ;SysTick产生0.5s,置位bit 1

    beq    main                  ;0.5s标志还没有置位      

    

    ;0.5s标志已经置位

    ldr    r0, =b_05s               

    ;位带操作清零0.5s标志

    mov    r1, #0

    str    r1, [r0]

    bl     LedFlas



    mov    r0, #'K'

    bl     send_a_char      

    b      main

           

             

           

;子程序 串口1发送一个字符

send_a_char

    push   {r0 - r3}

    ldr    r2, =USART1_DR  

    str    r0, [r2]

b1

    ldr    r2, =USART1_SR 

    ldr    r2, [r2]

    tst    r2, #0x40

    beq    b1

    ;发送完成(Transmission complete)等待

    pop    {r0 - r3}

    bx     lr











                

;子程序 led闪烁

LedFlas     

    push   {r0 - r3}

    ldr    r0, =Flag1

    ldr    r1, [r0]

    tst    r1, #Bit0

    ;bit0 闪烁标志位

    beq    ONLED        ;为0 打开led灯

    ;为1 关闭led灯

    ldr    r0, =b_flas

    mov    r1, #0

    str    r1, [r0]

    ;闪烁标志位置为0,下一状态为打开灯

    ;PC.7输出0

    ldr    r0, =GPIOC_BRR

    ldr    r1, [r0]

    orr    r1, #Bit7

    str    r1, [r0]

    b      LedEx

ONLED      

    ;为0 打开led灯

    ldr    r0, =b_flas

    mov    r1, #1

    str    r1, [r0]

    ;闪烁标志位置为1,下一状态为关闭灯

    ;PC.7输出1

    ldr    r0, =GPIOC_BSRR

    ldr    r1, [r0]

    orr    r1, #Bit7

    str    r1, [r0]

LedEx       

    pop    {r0 - r3}

    bx     lr

                               

;异常程序

NMI_Handler

    bx     lr



HardFault_Handler

    bx     lr

             

SysTick_Handler

    ldr    r0, =SysTim

    ldr    r1, [r0]

    add    r1, #1

    str    r1, [r0]

    cmp    r1, #500

    bcc    TickExit

    mov    r1, #0

    str    r1, [r0]

    ldr    r0, =b_05s 

    ;大于等于500次 清零时钟滴答计数器 设置0.5s标志位

    ;位带操作置1

    mov    r1, #1

    str    r1, [r0]

TickExit   

    bx     lr

                                                                          

    ALIGN           

    ;通过用零或空指令NOP填充,来使当前位置与一个指定的边界对齐

    END

推荐阅读

史海拾趣

Free2Move公司的发展小趣事

在电子行业中,Free2Move公司的发展故事虽不直接聚焦于传统电子制造或硬件设计,但其作为出行科技领域的创新者,与电子行业有着紧密的联系,尤其是在汽车电子、物联网(IoT)以及数据服务等方面。以下是五个与Free2Move公司发展相关的事实性故事:

1. 电动汽车生态系统的构建

Free2Move eSolutions,作为Stellantis和Engie EPS的合资企业,致力于电动汽车(EV)产品设计、开发、制造和分销的领先地位。它通过与全球科技企业的合作,如埃森哲,推动电动汽车接入电网,加速出行领域的全面电气化。这一举措不仅促进了电动汽车市场的增长,还带动了电动汽车充电基础设施、电池管理系统等电子相关产业的发展。(参考来源:埃森哲公司官网)

2. 远程信息处理与数据分析的集成

Free2Move与Guidepoint Systems合作,利用远程信息处理技术提升车队管理效率。Guidepoint Air数据监控服务能够接收来自符合条件的Stellantis车辆的数据,包括速度、位置、发动机状态等,为经销商、商业和政府车队提供库存管理和车队管理服务。这种数据驱动的解决方案依赖于先进的电子设备和物联网技术,实现了对车辆运营状态的实时监控和数据分析。(参考来源:百家号)

3. 商业车队解决方案的开发

Free2Move与Samsara的合作是另一个值得注意的案例。两家公司共同开发了一个集成解决方案,使Stellantis原厂远程信息处理设备的数据能够导入Samsara的互联运营云。这一合作让车队客户能够通过一个控制面板访问车辆的GPS定位、发动机工作小时数、燃料使用量和胎压等关键信息,从而提高了车队的运营效率和驾驶员的安全性。这一解决方案的成功实施,依赖于电子传感器、云计算和数据分析技术的深度融合。(参考来源:搜狐网)

4. 共享出行服务的全球扩展

Free2Move在全球范围内提供共享出行服务,包括共享汽车、停车位和充电站等。这一业务模式的成功,离不开电子支付系统、移动应用技术和物联网平台的支持。例如,在中国市场,Free2Move通过与当地合作伙伴的合作,推出了易微享共享汽车服务,为用户提供便捷的出行体验。这一过程中,电子支付、移动应用开发和物联网技术的运用,都是不可或缺的关键因素。(参考来源:雪球)

5. 医疗保健领域的跨界合作

虽然Free2Move的核心业务并非直接面向电子医疗行业,但其品牌名称“Free2Move”被另一家公司在医疗保健领域采用,推出了用于患者运动评估的技术系统。这一跨界合作展示了Free2Move品牌在不同领域的广泛影响力和创新能力。尽管这一故事并不直接涉及Free2Move公司的传统业务,但它反映了电子技术在不同行业间的渗透和融合趋势,以及品牌价值的多元化应用。(参考来源:爱迪斯通(北京)科技有限公司官网)

以上五个故事,从不同角度展示了Free2Move公司在电子行业中的发展和影响,体现了其在技术创新、数据服务、市场拓展等方面的综合实力。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

ACP Optoelectronic Technology Co Ltd始终坚持创新驱动的发展理念。公司不断投入研发资金,引进先进设备和技术人才,推动产品升级换代。随着市场的不断变化和客户需求的不断提升,ACP Optoelectronic Technology Co Ltd的产品线不断丰富和完善,产品质量和性能也得到了显著提升。

ETRI公司的发展小趣事

作为一家具有全球视野的研究机构,ETRI也积极拓展海外合作。他们与金陵华软投资集团(CSC)共同签署了战略合作备忘录,双方将在新技术对接、投资服务、资源共享、信息交流等方面实现合作。这一合作不仅有助于ETRI拓展海外市场,也将为双方带来更多的发展机遇。

Glenair公司的发展小趣事
电路中的连接线可能松动、接触不良或断裂,导致信号无法正确传输。
CLARE公司的发展小趣事

随着技术的不断进步和市场的日益成熟,CLARE公司开始致力于产品的创新和升级。公司研发团队紧跟科技前沿,不断探索新技术、新材料和新工艺的应用,推出了一系列具有创新性和领先性的电子产品。这些产品不仅满足了客户的需求,还引领了市场的潮流,进一步提升了CLARE公司的品牌影响力和市场竞争力。

Global Navigation Systems公司的发展小趣事
安装远程无线防盗报警系统时,首先需要将入侵探测器安装在需要防范的门窗等位置,并确保其能够准确检测到异常情况。然后,将微型无线报警发射机安装在探测器附近,并确保其能够接收到探测器的信号并发射出去。最后,将无线报警接收控制器安装在便于监控和接收报警信息的位置,并进行相应的调试和设置。在安装过程中,需要注意避免电磁干扰和信号衰减等问题,确保系统的稳定性和可靠性。

问答坊 | AI 解惑

出售液晶屏

LQ035Q7DB02/3.5\"液晶屏,带触摸.有资料 KHS038AAEAA-G83-06全新现货. LM32019T带高压.有资料.                        知春电子城,2C020柜台 010-62620599、13269197072…

查看全部问答>

MAX743双输出集成稳压器

MAX743双输出集成稳压器…

查看全部问答>

vs2005一用wstring就link出错?

代码如下 void test(){     wstring wstr=L\"\"; } 复制代码 注释掉这个函数,全部正确(0错误0警告),取消注释,链接错误 正在编译... wince demo.cpp 正在链接... wince demo.obj : error LNK2019: 无法解析的外部符号 \"public: ...…

查看全部问答>

dhcp client 移植问题,大家指教。

现在在做一个东西,但是手头的montavista系统带的文件系统下没有dhcp client。所以想要把一个pc机上的源码编译后用到我们的系统上。 请问这个东西要怎么做?是否有哪位高人做过这个东西,可以指点一下啊。 已经编译了dhcp client,不知还要改哪 ...…

查看全部问答>

请问wince环境下如何通过gprs远程无线与exchange服务器同步?

windowsmobile下手机上有个内置的activesync客户端一直在运行的,wince下不知道有没有这个东西,如果有,使用方式和wm下是一样的吗?谢谢…

查看全部问答>

利用CCSV5.1自带的430ware的强大资源库学习MSP430

本人为在校大学生,以前一直用的是51.八月初的时候被老师拉过来参加“TI杯”模拟电子专题邀请赛,这才接触到了MSP430。学校发了三块开发板,一块launchpad、一块MSP430FR5739、一块是MSP430F5529。这些板子用着感觉都挺好的,只可惜赛后都被收回去 ...…

查看全部问答>

压力传感器和荷重传感器

各位高手,小弟想请教一个问题,因为碰到很多客户使用荷重传感器,想了解下荷重传感器和压力传感器的区别,谁能详细的介绍下?!谢谢…

查看全部问答>

想收一张STM32F429Discovery(已就购入,请勿跟帖)

希望坛友可以好心出一片给我,其实我想直接去x宝买。或者rs买,但是价格有点小贵,如果能有130-150左右包邮就好了。…

查看全部问答>