This is the program I'm trying to run. It's actually a program for a running light but for GPIOB's LED which is connected for the first LED just stayed on all the time, while the other 3 LED which is at GPIOA is is a running light sequence.
#include "stm32f4xx.h"void delayMs(int n);
int main(){ RCC -> AHB1ENR |= 3; GPIOA -> MODER &= ~0x0000FC00; GPIOA -> MODER |= 0x00005400; GPIOB -> MODER &= ~0x00003000; GPIOB -> MODER |= 0x00001000;
while(1){ GPIOB->BSRR |= 0x004000A0; delayMs(500); GPIOA->BSRR |= 0x00800060; delayMs(500); GPIOA->BSRR |= 0x004000A0; delayMs(500); GPIOA->BSRR |= 0x002000C0; delayMs(500); }}
void delayMs (int n){ int i; for(; n>0; n--) for(i=0; i<3000; i++);}
Can someone help me?
I made two version of it, for .c and .asm. I don't know how to solve it after this.
AREA PROG, CODE, READONLY EXPORT main ENTRY RCC_AHB1ENR equ 0x40023830GPIOA_MODER equ 0x40020000GPIOA_ODR equ 0x40020014 ADC_SQR1 equ 0x40012008GPIOB_MODER equ 0x40020400GPIOB_ODR equ 0x40020414 main ldr r4, =RCC_AHB1ENR ; enable GPIOA clock ldr r5, [r4] orr r5, #3 str r5, [r4] ldr r1, =ADC_SQR1 ; enable GPIOB clock ldr r2, [r1] orr r2, #3 str r2, [r1] ldr r4, =GPIOA_MODER ; set pin A to output mode ldr r5, [r4] bic r5, #0x0000FC00 orr r5, #0x00005400 str r5, [r4]
ldr r1, =GPIOB_MODER ; set pin B to output mode ldr r2, [r1] bic r2, #0x00003000 orr r2, #0x00001000 str r2, [r1]
L1 ldr r4, =GPIOB_ODR ldr r5, =0x0000FFBF ; turn on D4 str r5, [r4] mov r0, #500 bl delay
ldr r4, =GPIOA_ODR ldr r5, =0x0000FF7F ; turn on D3 str r5, [r4] mov r0, #500 bl delay ldr r4, =GPIOA_ODR ldr r5, =0x0000FFBF ; turn on D2 str r5, [r4] mov r0, #500 bl delay ldr r4, =GPIOA_ODR ldr r5, =0x0000FFDF ; turn on D1 str r5, [r4] mov r0, #500 bl delay b L1 ; loop forever
delay ldr r1, =5325DL1 subs r1, r1, #1bne DL1 subs r0, r0, #1 bne delay bx lr endThis one is in .asm file. Can
I'm a new member here, so I'm sorry for this one. I should have explored more on the settings, before posting.
View all questions in Keil forum