找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1605|回复: 1
收起左侧

STM8新手求教串口!

[复制链接]
ID:111517 发表于 2017-8-22 17:33 | 显示全部楼层 |阅读模式
跟着教程学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. }
复制代码



回复

使用道具 举报

ID:111517 发表于 2017-8-23 15:56 | 显示全部楼层
已解决,主要是发送函数 UART1_SendData()的问题,里面 while(!(UART1_SR_bit.TXE));和UART1_DR = data;的顺序有错误,另经过学习说是这种方法写串口发送不科学,有会第一个数据发送失败的问题,标志位不应采用TXE,采用TC比较好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表