标题: STM8新手求教串口! [打印本页]

作者: 沧浪    时间: 2017-8-22 17:33
标题: STM8新手求教串口!
跟着教程学STM8,代码明明跟他们的一样,却总是有问题,求教!
  1. #include<iostm8s103k3.h>

  2. #define uint unsigned int
  3. #define uchr unsigned char


  4. void UART1_Init(uint baudart)
  5. {
  6.   uint baud;
  7.   baud=16000000/baudart;
  8.   UART1_BRR2 = (uchr)((baud & 0xf000)>>8) | (uchr)(baud & 0x000f);
  9.   UART1_BRR1 = (uchr)((baud & 0x0ff0)>>4);
  10.   UART1_CR1_bit.UART0 = 0; //使能UART中断。
  11.   UART1_CR2_bit.RIEN = 1;  //使能接收中断使能
  12.   UART1_CR2_bit.REN  = 1;  //使能接收
  13.   UART1_CR2_bit.TEN  = 1;  //使能发送
  14. }

  15. void UART1_SendData(uchr data)
  16. {
  17.   while(!(UART1_SR_bit.TXE));
  18.   UART1_DR = data;      
  19. }

  20. int main( void )
  21. {
  22.   asm("sim");
  23.   CLK_CKDIVR = 0X00;
  24.   UART1_Init(9600);
  25.   asm("rim");
  26.   while(1);
  27. }
  28.         
  29. #pragma vector = 20
  30. __interrupt void UART1_TX_ISP()
  31. {
  32.   uchr ch;
  33.   UART1_SR_bit.RXNE = 0;
  34.   ch = UART1_DR;
  35.   UART1_SendData(ch);
  36. }
复制代码




作者: 沧浪    时间: 2017-8-23 15:56
已解决,主要是发送函数 UART1_SendData()的问题,里面 while(!(UART1_SR_bit.TXE));和UART1_DR = data;的顺序有错误,另经过学习说是这种方法写串口发送不科学,有会第一个数据发送失败的问题,标志位不应采用TXE,采用TC比较好。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1