Notes03:使用寄存器点亮LED
创始人
2025-05-31 01:55:26
0

使用寄存器点亮LED

目标

使用寄存器点亮LED_G

原理图

LED原理图

由原理图可知, LED_G阳极接3V3, 阴极接PB0, 故只需将PB0输出低电平即可点亮LED_G

打开时钟

使用RCC_APB2ENR寄存器

偏移地址
基地址

RCC的起始地址为0x4002 1000, RCC_APB2ENR的偏移地址为0x18, 故RCC_APB2ENR的绝对地址为0x4002 1000 + 0x18 = 0x4002 1018

由于我们需使用PB0所以需要打开IO端口B时钟

位说明

由图可知, 需将RCC_APB2ENR的位3置1

代码如下:

*(unsigned int *)0x40021018 |= (1 << 3); // 打开时钟, 控制RCC_APB2ENR寄存器, 实现IO端口B时钟开启/** Notes:* |= (1 << 3); // 1左移3位后相或, 即可把Bit3置位*/

配置GPIO的模式

使用GPIOx_CRL寄存器, 如下图

位说明

由于使用PB0, 所以应配置GPIOB, GPIOB的起始地址为0x4001 0C00, 如下图

基地址

CRL的偏移地址为0x00, 故GPIOB_CRL的绝对地址为0x4001 0C00 + 0x00 = 0x4001 0C00

由于使用PB0, 所以需要配置端口0, 故使用CRL寄存器而非CRH寄存器, 并配置CNF0和MODE0

将PB0口配置成输出模式, 最大速度10MHz, 通用推挽输出模式(关于GPIO原理的讲解在下节)

MODE0 = 01, CNF0 = 00

代码如下:

*(unsigned int *)0x40010C00 |= ((1) << (4*0)); // 配置IO口为输出, 控制CRL寄存器, 实现GPIOB端口0为10MHz的推挽输出模式
/** Notes:* 分成n个一组, 对清零后的第i组设置成某二进制数, 该数对应的十进制为b* a |= (b << n * i);* 此时 |= ((1) << (4 * 0)); // 分成4个一组, 将第0组(即bit3~0)设置为1对应的二进制(即0001B)*/

PB0输出低电平

使用ODR寄存器, 如下图

位说明

由于需要使PB0输出故基地址应为GPIOB的起始地址**(即0x4001 0C00)**, 如图

基地址

故GPIOB_ODR的绝对地址为0x4001 0C00 + 0x0C = 0x4001 0C0C

因要使端口0输出低电平, 故应向ODR0 写入 0

代码如下:

*(unsigned int *)0x40010C0C &= ~(1 << 0); // 控制ODR寄存器, 实现GPIOB端口0输出低电平/** Notes:* 将变量a的Bit n位清零, a &= ~(1 << n)*/

源码

main.c文件

#include "stm32f10x.h"int main(void)
{*(unsigned int *)0x40021018 |= (1 << 3); // 打开时钟, 控制RCC_APB2ENR寄存器, 实现IO端口B时钟开启/** RCC_APB2ENR寄存器(Address : 0x40021000(RCC) + 0x18)* Bit3 : IOPBN : IO端口B时钟使能(I/O port B clock enable)* 由软件置1或请0* 0 : IO端口B时钟关闭* 1 : IO端口B时钟开启*/*(unsigned int *)0x40010C00 |= ((1) << (4*0)); // 配置IO口为输出, 控制CRL寄存器, 实现GPIOB端口0为10MHz的推挽输出模式/** GPIOx_CRL 端口配置低寄存器(Address : 0x40010C00(GPIO端口B)  + 0x00)* Bit32 CNF0 : 00 通用推挽输出模式* Bit10 MODE0 : 01 输出模式, 最大速度10MHz* * Notes:* 分成n个一组, 对清零后的第i组设置成某二进制数, 该数对应的十进制为b* a |= (b << n * i);* 此时 |= ((1) << (4 * 0)); // 分成4个一组, 将第0组(即bit3~0)设置为1对应的二进制(即0001B)*/*(unsigned int *)0x40010C0C &= ~(1 << 0); // 控制ODR寄存器, 实现GPIOB端口0输出低电平/** GPIOx_ODR 端口输出数据寄存器(Address : 0x40010C00(GPIO端口B)+ 0x0C)* Bit0 ODR0 : 端口输出数据* * Notes:* 将变量a的Bit n清零, a &= ~(1 << n);* * 注 : * 根据原理图LED_G的阳极为3V3, 阴极接PB0*/return 0;
}/** Notes:** 置位 : |= * |= (1 << 3);  // 1左移3位后相或, 把Bit3置位* * 复位 : &= ~ * &= ~(1 << 0); 1左移0位取反后相与, 把Bit0复位*/void SystemInit(void)
{return; // 编译需要
}

stm32f10x.h文件

// 用来存放STM32寄存器映射的代码
// 暂时不写

启动文件startup_stm32f10x_hd.s

;*                        SRAM mounted on STM3210E-EVAL board to be used as data 
;*                        memory (optional, to be enabled by user)
;*                      - Branches to __main in the C library (which eventually
;*                        calls main()).
;*                      After Reset the CortexM3 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>>   
;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
;  Stack Configuration
;    Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; Stack_Size      EQU     0x00000400AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp;  Heap Configuration
;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; Heap_Size       EQU     0x00000200AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limitPRESERVE8THUMB; Vector Table Mapped to Address 0 at ResetAREA    RESET, DATA, READONLYEXPORT  __VectorsEXPORT  __Vectors_EndEXPORT  __Vectors_Size__Vectors       DCD     __initial_sp               ; Top of StackDCD     Reset_Handler              ; Reset HandlerDCD     NMI_Handler                ; NMI HandlerDCD     HardFault_Handler          ; Hard Fault HandlerDCD     MemManage_Handler          ; MPU Fault HandlerDCD     BusFault_Handler           ; Bus Fault HandlerDCD     UsageFault_Handler         ; Usage Fault HandlerDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     0                          ; ReservedDCD     SVC_Handler                ; SVCall HandlerDCD     DebugMon_Handler           ; Debug Monitor HandlerDCD     0                          ; ReservedDCD     PendSV_Handler             ; PendSV HandlerDCD     SysTick_Handler            ; SysTick Handler; External InterruptsDCD     WWDG_IRQHandler            ; Window WatchdogDCD     PVD_IRQHandler             ; PVD through EXTI Line detectDCD     TAMPER_IRQHandler          ; TamperDCD     RTC_IRQHandler             ; RTCDCD     FLASH_IRQHandler           ; FlashDCD     RCC_IRQHandler             ; RCCDCD     EXTI0_IRQHandler           ; EXTI Line 0DCD     EXTI1_IRQHandler           ; EXTI Line 1DCD     EXTI2_IRQHandler           ; EXTI Line 2DCD     EXTI3_IRQHandler           ; EXTI Line 3DCD     EXTI4_IRQHandler           ; EXTI Line 4DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TXDCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1DCD     CAN1_SCE_IRQHandler        ; CAN1 SCEDCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5DCD     TIM1_BRK_IRQHandler        ; TIM1 BreakDCD     TIM1_UP_IRQHandler         ; TIM1 UpdateDCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and CommutationDCD     TIM1_CC_IRQHandler         ; TIM1 Capture CompareDCD     TIM2_IRQHandler            ; TIM2DCD     TIM3_IRQHandler            ; TIM3DCD     TIM4_IRQHandler            ; TIM4DCD     I2C1_EV_IRQHandler         ; I2C1 EventDCD     I2C1_ER_IRQHandler         ; I2C1 ErrorDCD     I2C2_EV_IRQHandler         ; I2C2 EventDCD     I2C2_ER_IRQHandler         ; I2C2 ErrorDCD     SPI1_IRQHandler            ; SPI1DCD     SPI2_IRQHandler            ; SPI2DCD     USART1_IRQHandler          ; USART1DCD     USART2_IRQHandler          ; USART2DCD     USART3_IRQHandler          ; USART3DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI LineDCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspendDCD     TIM8_BRK_IRQHandler        ; TIM8 BreakDCD     TIM8_UP_IRQHandler         ; TIM8 UpdateDCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and CommutationDCD     TIM8_CC_IRQHandler         ; TIM8 Capture CompareDCD     ADC3_IRQHandler            ; ADC3DCD     FSMC_IRQHandler            ; FSMCDCD     SDIO_IRQHandler            ; SDIODCD     TIM5_IRQHandler            ; TIM5DCD     SPI3_IRQHandler            ; SPI3DCD     UART4_IRQHandler           ; UART4DCD     UART5_IRQHandler           ; UART5DCD     TIM6_IRQHandler            ; TIM6DCD     TIM7_IRQHandler            ; TIM7DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
__Vectors_End__Vectors_Size  EQU  __Vectors_End - __VectorsAREA    |.text|, CODE, READONLY; Reset handler
Reset_Handler   PROCEXPORT  Reset_Handler             [WEAK]IMPORT  __mainIMPORT  SystemInitLDR     R0, =SystemInitBLX     R0               LDR     R0, =__mainBX      R0ENDP; Dummy Exception Handlers (infinite loops which can be modified)NMI_Handler     PROCEXPORT  NMI_Handler                [WEAK]B       .ENDP
HardFault_Handler\PROCEXPORT  HardFault_Handler          [WEAK]B       .ENDP
MemManage_Handler\PROCEXPORT  MemManage_Handler          [WEAK]B       .ENDP
BusFault_Handler\PROCEXPORT  BusFault_Handler           [WEAK]B       .ENDP
UsageFault_Handler\PROCEXPORT  UsageFault_Handler         [WEAK]B       .ENDP
SVC_Handler     PROCEXPORT  SVC_Handler                [WEAK]B       .ENDP
DebugMon_Handler\PROCEXPORT  DebugMon_Handler           [WEAK]B       .ENDP
PendSV_Handler  PROCEXPORT  PendSV_Handler             [WEAK]B       .ENDP
SysTick_Handler PROCEXPORT  SysTick_Handler            [WEAK]B       .ENDPDefault_Handler PROCEXPORT  WWDG_IRQHandler            [WEAK]EXPORT  PVD_IRQHandler             [WEAK]EXPORT  TAMPER_IRQHandler          [WEAK]EXPORT  RTC_IRQHandler             [WEAK]EXPORT  FLASH_IRQHandler           [WEAK]EXPORT  RCC_IRQHandler             [WEAK]EXPORT  EXTI0_IRQHandler           [WEAK]EXPORT  EXTI1_IRQHandler           [WEAK]EXPORT  EXTI2_IRQHandler           [WEAK]EXPORT  EXTI3_IRQHandler           [WEAK]EXPORT  EXTI4_IRQHandler           [WEAK]EXPORT  DMA1_Channel1_IRQHandler   [WEAK]EXPORT  DMA1_Channel2_IRQHandler   [WEAK]EXPORT  DMA1_Channel3_IRQHandler   [WEAK]EXPORT  DMA1_Channel4_IRQHandler   [WEAK]EXPORT  DMA1_Channel5_IRQHandler   [WEAK]EXPORT  DMA1_Channel6_IRQHandler   [WEAK]EXPORT  DMA1_Channel7_IRQHandler   [WEAK]EXPORT  ADC1_2_IRQHandler          [WEAK]EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]EXPORT  CAN1_RX1_IRQHandler        [WEAK]EXPORT  CAN1_SCE_IRQHandler        [WEAK]EXPORT  EXTI9_5_IRQHandler         [WEAK]EXPORT  TIM1_BRK_IRQHandler        [WEAK]EXPORT  TIM1_UP_IRQHandler         [WEAK]EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]EXPORT  TIM1_CC_IRQHandler         [WEAK]EXPORT  TIM2_IRQHandler            [WEAK]EXPORT  TIM3_IRQHandler            [WEAK]EXPORT  TIM4_IRQHandler            [WEAK]EXPORT  I2C1_EV_IRQHandler         [WEAK]EXPORT  I2C1_ER_IRQHandler         [WEAK]EXPORT  I2C2_EV_IRQHandler         [WEAK]EXPORT  I2C2_ER_IRQHandler         [WEAK]EXPORT  SPI1_IRQHandler            [WEAK]EXPORT  SPI2_IRQHandler            [WEAK]EXPORT  USART1_IRQHandler          [WEAK]EXPORT  USART2_IRQHandler          [WEAK]EXPORT  USART3_IRQHandler          [WEAK]EXPORT  EXTI15_10_IRQHandler       [WEAK]EXPORT  RTCAlarm_IRQHandler        [WEAK]EXPORT  USBWakeUp_IRQHandler       [WEAK]EXPORT  TIM8_BRK_IRQHandler        [WEAK]EXPORT  TIM8_UP_IRQHandler         [WEAK]EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]EXPORT  TIM8_CC_IRQHandler         [WEAK]EXPORT  ADC3_IRQHandler            [WEAK]EXPORT  FSMC_IRQHandler            [WEAK]EXPORT  SDIO_IRQHandler            [WEAK]EXPORT  TIM5_IRQHandler            [WEAK]EXPORT  SPI3_IRQHandler            [WEAK]EXPORT  UART4_IRQHandler           [WEAK]EXPORT  UART5_IRQHandler           [WEAK]EXPORT  TIM6_IRQHandler            [WEAK]EXPORT  TIM7_IRQHandler            [WEAK]EXPORT  DMA2_Channel1_IRQHandler   [WEAK]EXPORT  DMA2_Channel2_IRQHandler   [WEAK]EXPORT  DMA2_Channel3_IRQHandler   [WEAK]EXPORT  DMA2_Channel4_5_IRQHandler [WEAK]WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
USBWakeUp_IRQHandler
TIM8_BRK_IRQHandler
TIM8_UP_IRQHandler
TIM8_TRG_COM_IRQHandler
TIM8_CC_IRQHandler
ADC3_IRQHandler
FSMC_IRQHandler
SDIO_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandlerB       .ENDPALIGN;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************IF      :DEF:__MICROLIBEXPORT  __initial_spEXPORT  __heap_baseEXPORT  __heap_limitELSEIMPORT  __use_two_region_memoryEXPORT  __user_initial_stackheap__user_initial_stackheapLDR     R0, =  Heap_MemLDR     R1, =(Stack_Mem + Stack_Size)LDR     R2, = (Heap_Mem +  Heap_Size)LDR     R3, = Stack_MemBX      LRALIGNENDIFEND;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****

相关内容

热门资讯

朋友喜欢编故事,编的一波三折,... 朋友喜欢编故事,编的一波三折,装无辜扮可怜,别人还深信不疑,这样的叫什么?很明显,你这个朋友平时虚情...
实在找不到女朋友,有点想用各种... 实在找不到女朋友,有点想用各种方法骗女孩子骗到我身边谈恋爱,比如:编假故事 瞒得了一时,瞒不了一...
各年龄段的孩子适合看什么绘本 各年龄段的孩子适合看什么绘本  每个年龄段适合孩子看的绘本  0~1岁宝宝  选书要点:这个年龄...
一不小心爱上你还有续集么 一不小心爱上你还有续集么我感觉结局不大好 如果 能像 一起来看流星雨 一样有个 续集 这才完美但是...
《开学了》小品剧本台词 《开学了》小品剧本台词在日常生活和工作中,需要使用台词的情况越来越多,台词的写作与安排是剧作技巧的重...
寒门贵子最后两句文言文 寒门贵子最后两句文言文有志者事竟成,破釜沉舟,百二秦关终属楚;苦心人天不负,卧薪尝胆,三千越甲可吞吴...
厦门的大学有哪些 厦门的大学有...   漆黑的白鹭岛灯光垂落在白城沙滩做成的屏风上,放映着印着椰树和海浪的电影,带起芙蓉湖里凤凰花的颜色...
一年级看图写话小猴子和小熊过河 一年级看图写话小猴子和小熊过河一年级看图写话小猴子和小熊过河星期六,小猫给小猴打电话说:“邀请上你的...
深圳创业补贴2020,深圳创业...   【最高补贴500万元!城市金融助力大学生创业创新!】关注即将迎来毕业季。为推动杭州市大学生创业创...
保障参展人员和物资便利通关 转自:云南日报昆明海关出台16条措施保障参展人员和物资便利通关6月5日,昆明海关发布《第9届中国—南...
属鼠的人2021年全年运势 属...   00-1010如果你想咨询我,请通过以下方式搜索:      #星座女王傅子琪,      #塔...
二手衣服回收,闲置物品收购公司...   最近身边很多朋友不是辞职就是创业失败,教育培训行业最近一年的日子也不好过。每个人都失去了工作和事...
上证指数股票,持有沪市股票可以...   投资增长;投资策略-中长期;适合用户——有一定投资经验,抗风险能力强的用户。      内容仅供...
废品回收创业案例,先有钱后创业...   这个月入六千买废品的老头。在建立他的数据库的过程中,他穿着干净整洁的工作服出现在社区里。    ...
上海应届生人才补贴政策 优秀人...   市民政局表示,2022年元旦、春节帮扶困难群众送温暖计划已经确定,预计覆盖107.58万人。请参...
投资机构如何评估创业团队,什么...   每个公司的业务不一样,必须制度化的工作内容也会不一样,但有些工作内容是共通的。比如每天上下班打卡...
小学周记格式怎么写 小学周记格式怎么写周记和日记可以说差不多,只不过是日记日记天天记,周记却是一星期写一次,就跟写日记一...
己欲立而立人,己欲达而达人的大... 己欲立而立人,己欲达而达人的大概意思"己欲立而立人,己欲达而达人",意思是通过正己而正他人,自己通达...
阿里巴巴创业团队案例 阿里巴巴...   1、【在线教育行业】Timing App的Serverless实践案例      在用户和流量...
吴川海滨公路,吴川市海滨街道海...   近日,具有文化特色的吴川滨海小镇奠基仪式在王村港镇“梦幻海岸摄影基地”景区举行。目前,这个小镇旅...