gpt4 book ai didi

c - 带 stm8l 的 USART

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:29 25 4
gpt4 key购买 nike

这是我在 stm8l 中使用 usart 的代码。我面临的主要问题是,无论我为 USART_DR 寄存器分配什么值,它始终采用值 0xff 而不会随着我增加 char 变量而改变。只有 USART_SR 寄存器在我认为正确的值 0xc0 和 0xf0 之间切换。

clockinit(void) //16MHz internal clock enable
{
CLK_SWR = 0x01;
CLK_ICKR = 0x01;
CLK_ECKR = 0x00;
CLK_DIVR = 0x00;
CLK_PCKENR1 = 0xFF;
CLK_PCKENR2 = 0xFF;
}
usartinit(void) //usart initialisation
{
char X;
PC_DDR = 0x10;
PC_CR1 = 0x10;
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);
while (*z)
{
USART1_DR = (unsigned char) *z;
while (USART1_SR_TXE == 0);
z++;
}
}

最佳答案

您观察到的行为符合预期:

USART_DR 寄存器确实是两个 寄存器。当您写入 到内存位置并获取下一个要传输的字符时使用一个。另一个在从内存位置读取时使用,包含接收到的最后一个字符。

Architecture of USART_DR register

选择此架构是为了允许同时从 USART 发送和接收,这就是为什么您不从该位置读回您写入的内容的原因。

关于c - 带 stm8l 的 USART,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com