寄存器编写LED程序

1、环境

(1)原理图:PB1引脚控制LED灯。

(2)IDE:Keil MDK

(3)MCU:STM32F429IGT6

(3)目标:从零开始编写LED闪烁程序。

2、GPIO控制相关的寄存器

(1)通过查阅芯片参考手册的存储器映射,获取相应模块的基地址。

  • RCC基地址:0x40023800
  • GPIOB基地址:0x40020400

(2)GPIOB时钟使能的寄存器:0x40023800 + 0x30

(3)GPIO配置为输出模式的寄存器:0x40020400 + 0x00

(4)GPIO输出0/1寄存器:0x40020400 + 0x18

3、编写程序

3.1、创建工程

(1)创建空工程,选择新品型号即可。

(2)创建main.c文件和start.s文件。

3.2、main.c文件

(1)通过指针读写各个寄存器,实现LED闪烁。

复制代码
void delay(int i);

int main()
{
    unsigned int *pReg;

    /*使能GPIOB*/
    pReg = (unsigned int *)(0x40023800 + 0x30);
    *pReg |= (0x01 << 1);
    
    /*配置PB1为输出模式*/
    pReg = (unsigned int *)(0x40020400 + 0x00);
    *pReg |= (0x01 << 2);
    
    pReg = (unsigned int *)(0x40020400 + 0x18);
    while(1)
    {
        *pReg |= (0x01 << 1);   /*PB1输出1*/
        delay(1000000);
        
        *pReg |= (0x01 << 17);   /*PB1输出0*/
        delay(1000000);
    }
}

void delay(int i)
{
    while(i--);
}

3.3、start.s文件

复制代码
; 架构配置指令
PRESERVE8          ; 强制8字节堆栈对齐(符合AAPCS标准,确保函数调用时堆栈指针保持8字节对齐)
THUMB              ; 声明使用Thumb-2指令集(16/32位混合模式,代码密度与性能平衡方案)             
          

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY      ; 定义只读数据段,存放中断向量表
				EXPORT  __Vectors                  ; 导出向量表符号供外部链接
					
__Vectors       DCD     0                     ; [0x00] 初始堆栈指针值(复位后CPU自动加载到SP)
                DCD     Reset_Handler         ; [0x04] 复位向量 - 指向复位处理程序

; 代码段定义
AREA    |.text|, CODE, READONLY

; 复位处理程序(系统启动入口点)
Reset_Handler   PROC
				EXPORT  Reset_Handler             [WEAK]  ; 弱导出(允许其他模块覆盖实现)
                IMPORT  main                              ; 声明外部引用main()函数(C代码入口)
                
				LDR SP, =(0x20000000+0x30000)  ; 初始化堆栈指针(必须为复位后首要操作)
				BL main                        ; 调用main()函数

                ENDP   ; 结束过程定义
                
                 END   ; 结束汇编模块

4、ROM大小和RAM大小和起始地址

相关推荐
九皇叔叔8 小时前
《MySQL 体系架构详解:Server 层、SQL 执行流程与 InnoDB、MyISAM、MEMORY 存储引擎》
sql·mysql·架构
怕浪猫8 小时前
FDE 最大的浪费不是写出有 bug 的代码,而是漂亮地解决了一个错误的问题
面试·架构·github
AOI小白新手上路8 小时前
江科协51单片机 17-2 红外遥控电机调速实验调试总结
单片机·嵌入式硬件·51单片机
ZGIAI10 小时前
ZGI 迭代节点:批量资料的逐项处理
人工智能·架构
oshan201210 小时前
零基础STM32入门教程--10-PWM 呼吸灯
stm32·单片机·嵌入式硬件
ZGIAI10 小时前
ZGI 知识检索:让业务回答有据可查
人工智能·架构
天远Date Lab11 小时前
零信任架构实战:基于天远双人婚姻评估查询构建自动化房产按揭联合审查网关
运维·人工智能·架构·自动化
2601_9622190112 小时前
版本平滑升级架构:万象生鲜系统 V4.3.3 迭代无停机更新技术拆解
微服务·云原生·架构
2601_9622184714 小时前
万象生鲜系统冷链物联网接入技术实现生鲜企业温控管理数字化
大数据·运维·微服务·云原生·架构
jianqiang.xue14 小时前
智能体整体架构设计:四大模块与目录组织
单片机·嵌入式硬件·物联网·架构·esp32