[原创] 【瑞萨电子MCU套件免费试用】+调试串口遇到问题

IC爬虫   2014-8-26 18:14 楼主
调试的瑞萨这个芯片的串口真是各种坎坷,我使用的的是瑞萨官方提供的串口发送程序。使用这个配到的程序的PDF文档可以很顺利的进行软件的仿真。但是使用硬件的时候接收到的字符全是乱码,如下图:
QQ图片20140826175346.jpg

官方串口的初始化实现的是:波特率设置为38400bps,8,1 UART发送完毕中断。代码如下
  1. void SAU_Init(void)
  2. {
  3.     SAU0EN = 1U;    /* supply SAU0 clock开启串口的时钟 */
  4.     NOP();
  5.     NOP();
  6.     NOP();
  7.     NOP();
  8.     SPS0 = _00_SAU_CK00_FCLK_0 | _00_SAU_CK01_FCLK_0;/* SPS0:串行时钟选择寄存器0*/
  9.        
  10.         /* UART0 initial setting */
  11.     ST0 |= _01_SAU_CH0_STOP_TRG_ON;    /* UART0 transmit disable ST0:串行通道停止寄存器0*/
  12.     STMK0 = 1U;    /* disable INTST0 interrupt */
  13.     STIF0 = 0U;    /* clear INTST0 interrupt flag */
  14.     SRMK0 = 1U;    /* disable INTSR0 interrupt */
  15.     SRIF0 = 0U;    /* clear INTSR0 interrupt flag */
  16.     SREMK0 = 1U;   /* disable INTSRE0 interrupt */
  17.     SREIF0 = 0U;   /* clear INTSRE0 interrupt flag */
  18.     /* Set INTST0 low priority 设置UART0发送接收中断的低优先级,优先级为3(最低)*/
  19.     STPR10 = 1U;
  20.     STPR00 = 1U;
  21.     SMR00L = _20_SAU_SMRMN_INITIALVALUE | _02_SAU_MODE_UART | _00_SAU_TRANSFER_END;/* SMR00L:串行模式寄存器00L */
  22.     SMR00H = _00_SAU_CLOCK_SELECT_CK00 | _00_SAU_TRIGGER_SOFTWARE;
  23.     SCR00L = _00_SAU_MSB | _10_SAU_STOP_1 | _07_SAU_LENGTH_8;/* SCR00L:串行通信运行设定寄存器00L,MSB 优先的输入/ 输出,停止位长度=1 位,8 位数据长度*/
  24.     SCR00H = _80_SAU_TRANSMISSION | _00_SAU_INTSRE_MASK | _00_SAU_PARITY_NONE;/* 只发送,UART 模式,禁止发生错误中断INTSRE0,不输出奇偶校验位。接收时没有奇偶校验。*/
  25.     SDR00H = _80_UART0_TRANSMIT_DIVISOR;/* SDR00H:串行数据寄存器00H,分频因子为130*/
  26.     SO0 |= _01_SAU_CH0_DATA_OUTPUT_1;/* SO0:串行输出寄存器0,串行数据的输出值为“1” */
  27.     SOL0 |= _00_SAU_CHANNEL0_NORMAL;    /* output level normal SOL0:串行输出电平寄存器0,将通信数据直接输出*/
  28.     SOE0 |= _01_SAU_CH0_OUTPUT_ENABLE;    /* enable UART0 output SOE0:串行输出允许寄存器0,允许输出 */
  29.     /* Set TXD0 pin */
  30.     P0 |= 0x01U;
  31.     PM0 &= 0xFEU;
  32. }
上面的程序我对照官方的数据手册做了中文的注释。

瑞萨的这个芯片的最高支持的高速内部时钟振荡器为20mhz,具体的配置是在汇编的文件 QQ截图20140826180545.png 中,代码如下:
  1. OPT CSEG OPT_BYTE
  2.         DB 0E0H
  3.         DB 0EBH
  4.         DB 0FBH ;5 MHz
  5.         DB 85H
  6.        
  7.         END
上面的代码配置的单片机的主时钟为5MHZ.
在串口的初始化中的波特率配置是把主时钟130分频,得到的波特率应该是38461左右,在串口调试助手中设置波特率为38400,我明明发送的是一些字符,但是接收字符的时候都是乱码。


我所使用的工程如下:
UART-TX.rar (63.07 KB)
(下载次数: 52, 2014-8-26 18:13 上传)

官方的讲解文档:
R7F0C80212ESP UART发送示例程序.pdf (393.45 KB)
(下载次数: 93, 2014-8-26 18:14 上传)

回复评论 (4)

有没有试过低点的波特率?
点赞  2014-8-26 19:17
引用: johnrey 发表于 2014-8-26 19:17
有没有试过低点的波特率?

只要是串口调试助手支持的波特率都试了一遍
点赞  2014-8-27 08:58
引用: IC爬虫 发表于 2014-8-27 08:58
只要是串口调试助手支持的波特率都试了一遍

乱码一般应该问题都在波特率,而波特率的问题都在时钟。你不妨上示波器看下实际波特率是不是准的。
点赞  2014-8-27 13:37

挺麻烦的

点赞  2019-8-7 23:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复