寄存器编写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大小和起始地址

相关推荐
GIOTTO情几秒前
Infoseek 媒介宣发系统的技术架构拆解 —— 基于科技企业多平台传播场景的实践
科技·架构
静听松涛1332 分钟前
在线协作跨职能泳道图制作工具 PC版
大数据·论文阅读·人工智能·信息可视化·架构
￴ㅤ￴￴ㅤ9527超级帅2 分钟前
3、stm32的复位和时钟控制RCC
stm32·单片机·嵌入式硬件
雾岛听风眠10 分钟前
MCU中的晶振
单片机·嵌入式硬件
up向上up11 分钟前
基于STM32的多参数水温水质检测报警Proteus仿真设计
stm32·嵌入式硬件·proteus
无人装备硬件开发爱好者18 分钟前
AI 辅助程序设计的趋势与范式转移:编码、审核、测试全流程深度解析
大数据·人工智能·架构·核心竞争力重构
旧梦吟24 分钟前
脚本网页 嵌入式-笔记模板
stm32·嵌入式硬件·html5
余生皆假期-42 分钟前
SVPWM 扇区判断法和七段式实现
单片机·嵌入式硬件
v先v关v住v获v取1 小时前
番茄打浆机结构设计cad13+三维图+设计说明说
科技·单片机·51单片机
CQ_YM1 小时前
网络编程之UDP
linux·c语言·网络·单片机·udp