[英]Problem configuring the GPIO on STM32F103 using assembly
stack_size EQU 0x400; 0x400 = 1024 byte = 1kB stack_start EQU 0x20000000 + stack_size gpiob_base EQU 0x40010C00 rcc_base EQU 0x40021000 rcc_apb2enr EQU rcc_base+0x18 gpio_crl EQU gpiob_base gpiob_odr EQU gpiob_base+0x0C PRESERVE8 THUMB AREA RESET, DATA, READONLY DCD stack_start DCD __mainCode AREA |.text|, CODE, READONLY ENTRY __mainCode PROC LDR R0, =rcc_apb2enr LDR R1, [R0] LDR R2, =0x4 ORR R1, R2 STR R1, [R0]; Configure GPIO_CRL LDR R0, =gpio_crl LDR R1, [R0] LDR R2, =0xFFFFFF00 AND R1,R1,R2 ORR R1, R1, #0x20 STR R1, [R0]; Reset register; Configure GPIOB_ODR LDR R0, =gpiob_odr LDR R1, [R0] ORR R1, #0x2 STR R1, [R0] NOP ENDP ALIGN END
不幸的是,代碼沒有打開。 我已經調試了代碼並注意到以下內容。
請告知我的代碼有什么問題,我該如何解決?
只要寄存器中有多位參數,我就會養成先清除它們然后應用所需的非零值的習慣。
如果設置零值,則無需清除它們。 你已經在清理它了。
這是我使用的示例代碼。
////Clearing the bit masks. Need to keep it a practice at all multibit parameters
GPIOA->CRL=(GPIOA->CRL & ~((3U<<GPIO_CRL_CNF7_Pos) | (3U<<GPIO_CRL_CNF5_Pos)))
| (2U<<GPIO_CRL_CNF7_Pos) | (2U<<GPIO_CRL_CNF5_Pos);//setting desired values
在上面的代碼中,我想將 PA7 和 PA5 的配置設置為備用端口 function(推挽)。
所以我清除了這些位,然后設置了所需的值。
如果我想在這些位中設置一個零,那么我可以簡單地寫如下(為 PC13 編寫)
GPIOC->CRH |= (GPIOC->CRH & ~(1U<<GPIO_CRH_CNF13_Pos)) | (2U<<GPIO_CRH_MODE13_Pos); //LED PIN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.