stm32duino / Arduino_Core_STM32

STM32 core support for Arduino
https://github.com/stm32duino/Arduino_Core_STM32/wiki
Other
2.86k stars 980 forks source link

[U(S)ART] request list #1418

Open fpistm opened 3 years ago

fpistm commented 3 years ago

This issue aims to list all U(S)ART requests:

Note

This is a community projects, Any contribution is welcome, so feel free submit a PR. 😉

4ndreas commented 3 years ago

I needed the 9 Bit Mode for a project and changed all the buffers to uint16_t and it worked. But I'm not sure if there are some side effects. Could also solved with a flag for the 9th bit.

fpistm commented 3 years ago

Hi @4ndreas THis was discussed some years ago: https://github.com/stm32duino/Arduino_Core_STM32/issues/482#issuecomment-476229801

Main risk is the compatibility issue. I've added the request to the list.

matthijskooijman commented 3 years ago

I have one more suggestion for the list: Support serial writes when interrupts are disabled (e.g. from an ISR). This would make debugging a lot easier, and prevent surprise when someone prints from an ISR and the entire board locks up as soon as the buffer is full.

To support this usecase, the busy-wait loops in flush() and write() must be modified to call the ISR (or other code that moves the buffer into the UART) whenever a bit is written.

I implemented something similar on the Arduino AVR core, where IIRC it checks if interrupts are disabled, and if so, checks the TXE bit inside the busywait loop and calls the ISR if it is set. A similar approach can be taken here, though there are some complications:

The second point makes this more complicated than I have time for right now, but I at least wanted to share this request and my thoughts.

fpistm commented 3 years ago

Thanks @matthijskooijman for sharing. Just FYI it exists an uart debug feature which does not rely on IT: serial_debug Defining DEBUG_UART (USART peripheral, ex: USART1) and DEBUG_PINNAME_TX (PY_n) allows to specify the pin to use else by default it uses the same than default Serial instance. This fallback to uart_debug_write.

akasona commented 3 years ago

This is a community projects, Any contribution is welcome, so feel free submit a PR.

@fpistm I want to make PR for the item: Hardware Flow control for serial communication. Where can I find any rules or workflows to contribute this project?

fpistm commented 3 years ago

This is a community projects, Any contribution is welcome, so feel free submit a PR.

@fpistm I want to make PR for the item: Hardware Flow control for serial communication. Where can I find any rules or workflows to contribute this project?

Hi @akasona Sorry, I missed your comment. You can refers to the https://github.com/stm32duino/Arduino_Core_STM32/blob/master/CONTRIBUTING.md To resume:

ht93 commented 2 years ago

@fpistm For #1160 UART RX/TX level inversion on F3/F7 platforms. Is it possible implement similar function to F4 platform? Or is there any workaround besides hardware way like add physical inverter?

fpistm commented 2 years ago

Hi @ht93 , it seems not available fo F4.

ht93 commented 2 years ago

Hi @fpistm, is there any other way to implement this? I am current working on a design with very limit size. Thanks a lot!

fpistm commented 2 years ago

Hi @fpistm, is there any other way to implement this? I am current working on a design with very limit size. Thanks a lot!

I don't know. You could try to ask on the forum.

akasona commented 2 years ago

@fpistm I'm sorry for so slow action! Finally I made up PR in #1634.

akasona commented 2 years ago

Added flow control APIs https://github.com/stm32duino/wiki/wiki/API#enable-hardware-flow-control

anatom74 commented 2 years ago

a suggestion to support for swapping RX/TX pins (Bit 15 SWAP: Swap TX/RX pins)

mhmayyan commented 1 month ago

Hi I am unable to start UART with a 1200 baud rate. I used Serial.begin(1200), but no data were transmitted. When I try a 2400 and higher baud rates, it works. Does anyone have any idea? I tried Nucelo-L476RE and B-L4S5I-IOT01A.

fronders commented 1 month ago

@mhmayyan It's probably that the BRR value would overflow 0xFFFF for your desired rate at given core frequency. IIRC the core runs by default at 80MHz so that would give you bauds between 1220 bps and 5Mbps. I don't know if you check the return code, but at 1200 it would probably just not initialize and return an error

p.s. I'd recommend opening a separate issue not to flood the request list

fpistm commented 1 month ago

Hi @mhmayyan @fronders gave the right answer. BRR is overflowed, you have to decrease the clock config and for this kind of question you can open a GitHub discussion.