你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8 波特率

[复制链接]
zj20115659 提问时间:2015-10-14 08:36 /
STM8的串口波特用115200就乱码;我还是用的外部16晶振,求助
收藏 评论15 发布时间:2015-10-14 08:36

举报

15个回答
你好我好大家好! 回答时间:2015-10-14 09:23:40
帮顶                                             
ughbss 回答时间:2015-10-14 09:27:04
把代码发上来看看
刚声打火机 回答时间:2015-10-14 10:10:55
一定是代码的问题,我用115200用的好好的,可以贴上你的代码看看
k_xg1919 回答时间:2015-10-14 10:28:31
同问....
zj20115659 回答时间:2015-10-14 13:42:52
  1. #include "uart.h"
  2.        
  3. unsigned char USART2_RX_BUF[USART2_MAX_RECV_LEN]={0}; //接收缓冲,最大USART2_MAX_RECV_LEN个字节. 串口接收缓存区
  4. unsigned char USART2_RX_STA=0;
  5. unsigned char Uart2Time=0; //uart2接收数据
  6. /*****************************************************************************
  7. Prototype    : Init_UART2
  8. Description  : 串口初始化函数
  9. Input        : 波特率  
  10. Output       : None
  11. Return Value : void
  12. Calls        :
  13. Called By    :

  14. *****************************************************************************/
  15. void Init_UART2(unsigned long baud)
  16. {
  17.   unsigned long tmpData = SYS_UART_CLOCK / baud;
  18.   UART1_CR1=0x00;
  19.   UART1_CR2=0x00;
  20.   UART1_CR3=0x00;
  21.   

  22.   UART1_BRR1 = (unsigned char)((tmpData >> 4) & 0x0ff);
  23.   UART1_BRR2 = (unsigned char)((tmpData & 0x00f) | ((tmpData >> 8) & 0x0f0));        //设置波特率

  24.   UART1_CR2=0x2c;//允许接收,发送,开接收中断
  25.   UART1_CR4 = 0x00;
  26. }
  27. /*****************************************************************************
  28. Prototype    : UART2_sendchar
  29. Description  : 串口发送一个字符
  30. Input        : sendData
  31. Output       : None
  32. Return Value : void
  33. Calls        :
  34. Called By    :


  35. *****************************************************************************/
  36. void UART2_sendchar(unsigned char sendData)
  37. {
  38.   CLEARBIT(UART1_SR, 6);
  39.   UART1_DR = sendData;
  40.   while(!CHECKBIT(UART1_SR, 6))
  41.   {

  42.   }
  43. }
  44. /*****************************************************************************
  45. Prototype    : UART2_sendStr
  46. Description  : 串口发送一个字符串
  47. Input        : sendData,length
  48. Output       : 发送出去的数据长度
  49. Return Value : void
  50. Calls        :
  51. Called By    :


  52. *****************************************************************************/
  53. unsigned char UART2_sendStr(unsigned char* sendStr,unsigned char length)
  54. {
  55.   unsigned char iLoop = 0;
  56.   if((sendStr != NULL)&&(length >0))
  57.   {
  58.     for(iLoop = 0; iLoop < length; iLoop++)
  59.     {
  60.     UART2_sendchar(*(sendStr + iLoop));
  61.     }       
  62.   }
  63.   else{        }
  64.   return iLoop;
  65. }
  66. /*****************************************************************************
  67. Prototype    : UART2_R_OR_IRQHandler
  68. Description  : 串口中断接受函数
  69. Input        : void
  70. Output       : none
  71. Return Value : void
  72. Calls        :
  73. Called By    :


  74. *****************************************************************************/
  75. #pragma vector= UART1_R_OR_vector//0x19
  76. __interrupt void UART1_R_OR_IRQHandler(void)
  77. {
  78. //if(USART2_RECV_END==0) //当前可以接收数据
  79.   //{
  80.     unsigned char temp;
  81.     temp=UART1_DR;
  82.     OpenTimer2();
  83.     //UART2_sendchar(temp);
  84.     if(USART2_RX_STA<USART2_MAX_RECV_LEN)
  85.     {
  86.       USART2_RX_BUF[USART2_RX_STA++]=temp;
  87.     }
  88.    
  89.     else
  90.     {
  91.       USART2_RECV_END=1;//接收数据超过缓存区 强制标记接收完成 丢弃多余的数据
  92.       USART2_RX_STA=0;
  93.       CloseTimer2();//关闭TIM2
  94.     }
  95.   //}
  96. }
复制代码
zj20115659 回答时间:2015-10-14 16:01:13
ughbss 发表于 2015-10-14 09:27
把代码发上来看看

代码发出来了,6楼
zj20115659 回答时间:2015-10-14 16:02:12
ughbss 发表于 2015-10-14 09:27
把代码发上来看看

代码发出来了,6楼
zj20115659 回答时间:2015-10-14 16:03:47
刚声打火机 发表于 2015-10-14 10:10
一定是代码的问题,我用115200用的好好的,可以贴上你的代码看看

代码贴出来了,6楼;SYS_UART_CLOCK=16000000
ughbss 回答时间:2015-10-14 16:17:01
你用的那个型号的STM8
zj20115659 回答时间:2015-10-14 16:31:25
ughbss 发表于 2015-10-14 16:17
你用的那个型号的STM8

STM8S103F3  
ughbss 回答时间:2015-10-14 16:50:32
本帖最后由 ughbss 于 2015-10-14 16:51 编辑

问题出在,你初始化的是UART1相关寄存器,而你在使用时是用的UART2相关寄存器(看你的中断程序),STM8S103没有UART2
zj20115659 回答时间:2015-10-14 17:12:42
ughbss 发表于 2015-10-14 16:50
问题出在,你初始化的是UART1相关寄存器,而你在使用时是用的UART2相关寄存器(看你的中断程序),STM8S10 ...

我用的是UART1; 函数名字是我从s105那边改过来的;不影响
ughbss 回答时间:2015-10-14 17:30:10
zj20115659 发表于 2015-10-14 17:12
我用的是UART1; 函数名字是我从s105那边改过来的;不影响

现象是什么?MCU发数据乱码?只在115200下乱码?
zj20115659 回答时间:2015-10-15 08:48:52
ughbss 发表于 2015-10-14 17:30
现象是什么?MCU发数据乱码?只在115200下乱码?

恩,57600以下都可以,加大到115200就乱码了
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版