首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用stm8l的USART

使用stm8l的USART
EN

Stack Overflow用户
提问于 2017-06-21 15:34:28
回答 1查看 349关注 0票数 2

这是我在stm8l中使用usart的代码。我面临的主要问题是,无论我分配给USART_DR寄存器的值是什么,它总是取值0xff,甚至在我递增我的char变量时都没有改变。只有USART_SR寄存器在值0xc0和0xf0之间切换,我认为这是正确的。

代码语言:javascript
复制
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++;                               
}
}
EN

回答 1

Stack Overflow用户

发布于 2017-06-21 16:22:49

您观察到的行为与预期一致:

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

选择这种架构是为了允许从USART同时发送和接收,这就是为什么你不从那个位置读回你写给它的东西的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44669603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档