打印
[STM32F4]

用Systick点亮灯后灭不了,求解脱。

[复制链接]
4197|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bli19|  楼主 | 2014-9-3 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bli19 于 2014-9-3 15:42 编辑

; 主频已经通过PLL_getV设为168mhz,不太可能出现问题,应该是先亮后灭,但是实际上是: 过了大概0.5秒led一直处于常量状态,求指点啊。
           IMPORT PLL_getV
;RCC寄存器地址映像
GPIO_PORTD_Mode    EQU 0x40020C00 ;Moder[0:1] from [31...0] 01 for output
GPIO_PORTD_ODR     EQU 0x40020C14         
GPIO_PORTD_en           EQU 0x40023830
GPIO_PORTD_BSRR    EQU 0x40020C18 ;BSRR [0:15] for set and[16:31] FOR  reset

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


;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           200
;***************************************************************************************
                AREA            |.text|, CODE, READONLY
;主程序开始
                ENTRY                           ;指示程序从这里开始执行
Start
;时钟系统设置
                BL  PLL_getV
                                 
                                                
;AFIO 参数设置
               
;Systick 参数设置
                ldr             r0,=SYSTICKRVR          ;Systick装初值
                mov             r1,#21000 ;168000/8=21000
                str             r1,[r0]
                ldr             r0,=SYSTICKCSR          ;设定、启动Systick
                mov             r1,#0x03
                str             r1,[r0]
                                LDR R1, =GPIO_PORTD_en         
                                LDR R0, [R1]                 
                                ORR R0, R0, #0x08               
                                STR R0, [R1]                  
                                NOP
                                NOP                              
                                LDR R1,=GPIO_PORTD_Mode
                                LDR R0, =0x55000000
                                STR R0, [R1]
                                NOP
                NOP;方便调试,嘿嘿!                                
;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
                beq             main                    ;主程序0.5s走一次
                ldr             r0,=b_05s               ;位带操作清零0.5s标志
                mov             r1,#0
                str             r1,[r0]
                bl              LedFlas
                b               main
;子程序**********************************************************************************
LedFlas
                push            {r0-r3}
                ldr             r0,=Flag1
                ldr             r1,[r0]
                tst             r1,#Bit0
                beq             ONLED
               
                ldr             r0,=b_flas
                mov             r1,#0
                str             r1,[r0]
                ;PD14输出1
              ; ldr             r0,=GPIO_PORTD_BSRR
               ldr r0, =GPIO_PORTD_DR
                ldr             r1,[r0]
                orr             r1,#Bit14
                str             r1,[r0]
                b               LedEx
ONLED
                ldr             r0,=b_flas
                mov             r1,#1
                str             r1,[r0]
                ;PD14输出0
             ; ldr             r0,=GPIO_PORTD_BSRR        BSRR操作太不方便了,用ODR了,但是这效果还是跟之前一样
                ldr r0, =GPIO_PORTD_DR
                ldr             r1,[r0]
                orr             r1,#Bit14
                str             r1,[r0]
LedEx
                pop            {r0-r3}
                bx              lr
;异常程序*******************************************************************************
NMI_Handler
                ;xxxxxxxxxxxxxxxxxx
                bx              lr
;-----------------------------
HardFault_Handler
                ;xxxxxxxxxxxxxxxxxx
                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               ;位带操作置1
                mov             r1,#1
                str             r1,[r0]
TickExit
                bx              lr
;***************************************************************************************
                ALIGN           ;通过用零或空指令NOP填充,来使当前位置与一个指定的边界对齐
;-----------------------------
                END
沙发
manwjh| | 2014-9-3 15:32 | 只看该作者
你用汇编呀!

使用特权

评论回复
板凳
diweo| | 2014-9-3 16:29 | 只看该作者
估计是刚从51转过来。。。

使用特权

评论回复
地板
bli19|  楼主 | 2014-9-3 16:43 | 只看该作者
diweo 发表于 2014-9-3 16:29
估计是刚从51转过来。。。

差不多吧,唉,我avr转过来的,当时只学了汇编和一点c

使用特权

评论回复
5
小浣熊| | 2014-9-3 17:14 | 只看该作者
我的汇编知识都忘光了。。

使用特权

评论回复
6
聿怀嘿嘿| | 2014-9-3 17:27 | 只看该作者
汇编

使用特权

评论回复
7
aozima| | 2014-9-3 18:11 | 只看该作者
闪太快,灭了看不见。

使用特权

评论回复
8
bli19|  楼主 | 2014-9-3 19:33 | 只看该作者
aozima 发表于 2014-9-3 18:11
闪太快,灭了看不见。

我怀疑是卡在loop里了,开机延时能通过控制LOAD的值感觉到长短,然后就变亮,一直常亮。
然后一直卡在这里:

使用特权

评论回复
9
bli19|  楼主 | 2014-9-3 19:42 | 只看该作者
本帖最后由 bli19 于 2014-9-3 19:43 编辑

唉,还是自己撸一个吧。
其实这个位带设置和非权限是从别人那里撸来的程序,不过在我这里似乎还并不太行,还是得靠自己啊。
别人的太高端了,看的我都头晕。

使用特权

评论回复
10
李富贵| | 2014-9-3 22:42 | 只看该作者
高端个屁,爷直接写机器码,那才是高端。

使用特权

评论回复
11
ar_m_cu| | 2014-9-3 23:23 | 只看该作者
看不懂汇编

使用特权

评论回复
12
bli19|  楼主 | 2014-9-3 23:50 | 只看该作者
李富贵 发表于 2014-9-3 22:42
高端个屁,爷直接写机器码,那才是高端。

那你是牛

使用特权

评论回复
13
ddllxxrr| | 2014-9-4 05:29 | 只看该作者
现在还有用汇编地????后队变前队撒退

使用特权

评论回复
14
dongranmengming| | 2014-9-4 07:44 | 只看该作者
直接硬件仿真不就知道了。

使用特权

评论回复
15
frlop| | 2014-9-4 08:46 | 只看该作者
汇编。。。完全看不懂。

使用特权

评论回复
16
汇编。。。我先解脱。。。撤退

使用特权

评论回复
17
mmuuss586| | 2014-9-4 12:28 | 只看该作者
设个断点看下,是否有变化;
有的话,就是闪的太快了;

使用特权

评论回复
18
maplblue| | 2014-9-4 13:02 | 只看该作者
闪太快了,改成两秒钟间隔看看

使用特权

评论回复
19
海中水| | 2014-9-4 13:17 | 只看该作者
这种程序看起来难度有点大?

使用特权

评论回复
20
江枫渔火| | 2014-9-4 13:22 | 只看该作者
汇编累不累?兄弟~用C语言就几句话的事了~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

73

帖子

0

粉丝