这是我用stm8l使用usart的代码。我面临的主要问题是,无论我分配给USART_DR寄存器的值如何,它总是取值0xff,甚至不会因为我增加char变量而改变。只有USART_SR寄存器在我认为正确的值0xc0和0xf0之间切换。USART与stm8l
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++;
}
}
那么,是寄存器做a)读和b)写?你在哪里读过它?你用你的调试器阅读它?当您在范围内时,是否有任何数据在输出引脚上传输?请注意,我们无法有效地涉及涉及硬件的问题。 – ThingyWotsit
是的,我用我的调试器阅读它。我应该在哪里检查输出? – ABHI
请编辑您的问题并修复缩进。 – Lundin