We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I have a Nucleo-32 STM 432, ARM Cortex M4 and my teacher asked us for a program in which the pin turns on and off simulating a "distress signal" (SOS) in Morse code (... _ _ _...). This is my program, but I don't know how to configure it so that my led blinks in this way. I hope you can help me.
;*******************************************************************************
DELAY_INTERVAL EQU 0x124F80;**************************
;STM32L43xxx reference manual RM0394, p.64RCC_AHB2ENR EQU 0x4002104C ;Clock control for AHB2 p.214-215
;GPIO-B control registersGPIOB_MODER EQU 0x48000400 ;set GPIO pin mode as Input/Output/AnalogGPIOB_OTYPER EQU 0x48000404 ;Set GPIO pin type as push-pull or open drainGPIOB_OSPEEDR EQU 0x48000408 ;Set GPIO pin switching speedGPIOB_PUPDR EQU 0x4800040C ;Set GPIO pin pull-up/pull-downGPIOB_ODR EQU 0x48000414 ;GPIO pin output data;***************************
AREA MyCodigo, CODE, READONLY ENTRY ; Mark first instruction to execute EXPORT __main __main ; Enable GPIO clock LDR R1, =RCC_AHB2ENR ;Pseudo-load address in R1 LDR R0, [R1] ;Copy contents at address in R1 to R0 ORR R0, #0x00000002 ;Bitwise OR entire word in R0, result in R0 STR R0, [R1] ;Store R0 contents to address in R1
; Set mode as output p.263 LDR R1, =GPIOB_MODER ;Two bits per pin so bits 0 to 3 control pins 0 to 3 LDR R0, [R1] ORR R0, #0x00000055 ;Mode bits set to '01' makes the pin mode as output AND R0, #0xFFFFFF55 ;OR and AND both operations for 2 bits STR R0, [R1]
; Set type as push-pull (Default) LDR R1, =GPIOB_OTYPER ;Type bit '0' configures pin for push-pull LDR R0, [R1] AND R0, #0xFFFFFFF0 STR R0, [R1] ; Set Speed slow LDR R1, =GPIOB_OSPEEDR ;Two bits per pin so bits 0 to 3 control pins 0 to 3 LDR R0, [R1] AND R0, #0xFFFFFF10 ;Speed bits set to '00' configures pin for slow speed STR R0, [R1] ; Set pull-up LDR R1, =GPIOB_PUPDR ;Two bits per pin so bits 0 to 3 control pins 0 to 3 LDR R0, [R1] AND R0, #0xFFFFFF10 ;Clear bits to disable pullup/pulldown STR R0, [R1];***************************turnON ; Set output high LDR R1, =GPIOB_ODR LDR R0, [R1] ORR R0, #0x0000000F STR R0, [R1] BL delay ; Call subroutine delay turnOFF ; Set output low LDR R1, =GPIOB_ODR LDR R0, [R1] AND R0, #0xFFFFFFF0 STR R0, [R1] BL delay ; Call subroutine delay ; loop B turnON
; Subrutina delaydelay LDR R2,=DELAY_INTERVALret CBZ R2, delayDone SUBS R2, R2, #1 B retdelayDone MOV pc,lr ; Return END
IngArless said:teacher asked us
Then your teacher clearly thinks that you should be able to do this - if not, you should be talking to your teacher!
IngArless said:I don't know how to configure it so that my led blinks in this way
So what does the program actually do?
Before doing the SOS pattern, have you done a basic blinky which just toggles the led on & off continuously?
What debugging have you done to find the problem(s) with your code?