cancel
Showing results for 
Search instead for 
Did you mean: 

[SOLVED] STM32G431 : reading the current value of USART2->CR1 (and display it , for arduino style debugging)

mwalt.3
Associate III

 

Post

[EDIT] displaying the values of the registers works on STM32duino arduino console

Hi ,

I am in the arduino world ; for some more particular tasks , the existing API is not enough , so I have to write my own code and debug it
I am trying to spy the actual value (setting) of some registers of some peripherals
this generally works , but I have a problem with USART2->CR1 : it always says value is "0" , but this is not possible , because USART2 is currently working !
Quetion : is there an other way to designate USART2->CR1 , in ordre to read the right value ?
this is the code : USART2 is outputed to a logical analyser , so can I see it really works

MCU is generic STM32G431CBUx ; thanks !

CODE: SELECT ALL

HardwareSerial Serial2(PA3, PA2);  // configure USART2
uint64_t millis_duration = 100, millis_begin; // configure a 100ms tick
void setup() {
  Serial.begin(115200); // USB to monitor
  delay(3000);
  Serial2.begin(250000);  // PA2 USART2 Tx , to logical analyser
}
void loop() {
  if (millis() - millis_begin > millis_duration) {  // debug USART2
    millis_begin += millis_duration;
    Serial.println(USART2->CR1, BIN);  // debug to monitor , display is always "0" ?
    Serial2.write(USART2->CR1); // can see the signal with logical analyser , confirms USART2 is working , confirms read CR1 value is false
  }
}
1 ACCEPTED SOLUTION

Accepted Solutions

the problem was that , I tried to configure the USARTs as receive only , but this is not an option at STM32duino , because it accepts only Rx + Tx pins mode , or single wire half duplex on Tx pin mode

so STM32duino did nothing , nor signalling an error

people wanting to use USARTs as Rx only , are terrible perverts

View solution in original post

8 REPLIES 8

Are you sure USART2 = Serial2?

Try to read/print *all* USARTs' CR1.

JW


@mwalt.3 wrote:

is there an other way to designate USART2->CR1 , in ordre to read the right value 


Why not use the debugger?

Arduino IDE now supports the debugger - doesn't it?

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.
mwalt.3
Associate III

it looks like there is something wrong in STM32duino with this (not so) particular MCU

in addition , STM32duino does not seem to support debugger , so I will switch to STM32cube for this project (will be back)


@mwalt.3 wrote:

it looks like there is something wrong in STM32duino


Have you reported this to them - on their forum and/or their GitHub?

https://www.stm32duino.com/

https://github.com/stm32duino 

https://github.com/stm32duino/Arduino_Core_STM32/issues ?

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.

I will do , after some further researches

what seams to be clear now :

- displaying the registers on arduino's monitor , works

- I am using the right variant , in order to configure the USARTS (putting a typo into the variant's file leads to a compiler error)

- nevertheless , STM32duino doesn't configure the USART , because USART1->CR1 is always 0

- and this , even for sure , as the corresponding bit is not set in the peripheral clock enable register

the problem was that , I tried to configure the USARTs as receive only , but this is not an option at STM32duino , because it accepts only Rx + Tx pins mode , or single wire half duplex on Tx pin mode

so STM32duino did nothing , nor signalling an error

people wanting to use USARTs as Rx only , are terrible perverts


@mwalt.3 wrote:

STM32duino did nothing , nor signalling an error


Thanks for sharing the solution.

Have you fed this back to STM32duino ?

A complex system that works is invariably found to have evolved from a simple system that worked.
A complex system designed from scratch never works and cannot be patched up to make it work.

Hi , yes I did