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.
Hello , I'm working on the stm8l microcontroller and trying to use its USART. I am getting a very peculiar problem. No matter what value I assign to the USART_DR register , it always takes the value 0xff even if I give char value or a int value. I am reading the DR register using the debugger of STVD. Is there a way to read TDR and RDR registers separately? My code is as follows:
# include "stm8l.h" # include "stm8s.h" unsigned int i = 0; unsigned int val = 0; strlen(const char *str) { const char *s; for (s = str; *s; ++s); return (s - str); } void clockinit(void) //16MHz internal clock enable { CLK_SWR = 0x01; CLK_ICKR = 0x00; CLK_ECKR = 0x00; CLK_DIVR = 0x00; CLK_PCKENR1 = 0xFF; CLK_PCKENR2 = 0xFF; } void usartinit(void) //usart initialisation (115200 , 8bit , no parity , 1 stop bit { char X; PC_DDR = 0x10; PC_CR1 = 0x10; PE_DDR = 0xff; PE_CR1 = 0xff; X = USART1_SR; X = USART1_DR; USART1_CR1 = 0x00; USART1_CR2 = 0x0C; USART1_CR3 = 0x0f; USART1_CR4 = 0x03; USART1_CR5 = 0x00; USART1_GTR = 0x00; USART1_PSCR = 0x00; USART1_BRR2 = 0x0A; USART1_BRR1 = 0x08; } void main() { char *z = "HELLO"; clockinit(); usartinit(); val = strlen(z); for (i = 0;i<val;i++) { USART1_DR = *z; while (USART1_SR_TXE == 0) { z++; } } }
This has nothing to do with Keil - Keil do not have any STM8 products.
You need to go to the ST forum:
community.st.com/.../stm8-mcus
Oh - you already have:
community.st.com/.../41634-usart-with-stm8l