为什么的STM8S003F3P6的uart1发送数据是乱码的?你们遇到过吗?
/* MAIN.C file*
* Copyright (c) 2002-2005 STMicroelectronics
*/
#include "stm8s_clk.h"
#include "stm8s_gpio.h"
#include "stm8s_uart1.h"
#include "stm8s.h"
#include <string.h>
void Init(void);
void Uart1Send8String(u8 *pStr,u8 length);
void delayMs(u32 ms){
u32 count =1000;
for(;ms>0;ms--){
for(;count>0;count--){
_asm("nop");
}
}
}
void Uart1Send8String(u8 *pStr,u8 length){
u8 i;
for(i=0;i<length;i++){
while(UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
UART1_SendData8(pStr);
delayMs(100);
}
}
void Init(void){
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);//16MHz8分频为2MHz
CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);
delayMs(100);
//GPIO初始化
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOC);
GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); //USART1_TX-PD5
GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); //USART1_RX-PD6
UART1_DeInit();
UART1_IrDAConfig(UART1_IRDAMODE_NORMAL);
UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, \
UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
UART1_Cmd(ENABLE);
}
void main(void)
{
u8 str[] = "fuck you!!!!";
Init();
while(1){
Uart1Send8String(str,strlen(str));
delayMs(100000);
}
}
使用的编译器STVD 和 STM8 Cosmic
得到的结果如下:
我测量的方法是:TX和RX空载,连接到R232 在连接电脑端。
是不是我该怀疑电路板有问题了呢。
来一个人,帮我说一下,thank you! 我对STM32熟悉,但是没做过STM8的,感觉应该STM32简单的,搞了一天了,发送的都是乱码!唉,STM 的芯片还是不怎么靠谱啊! 为自己助威! lqh-414236 发表于 2015-1-29 16:29
我对STM32熟悉,但是没做过STM8的,感觉应该STM32简单的,搞了一天了,发送的都是乱码!唉,STM 的芯片还是 ...
不要动不动就怀疑芯片,毕竟这么多人都在用呢,还而还是常用的USART,不会有什么问题的 dsjsjf 发表于 2015-1-30 11:54
不要动不动就怀疑芯片,毕竟这么多人都在用呢,还而还是常用的USART,不会有什么问题的 ...
问题来了!示波器测量,以及串口打印都有问题。何解?单步调试,寄存器值均没有问题。为何串口数据确是不对的! 波特率,时钟,晶振频率再查查
stm8f003内建hsi不准确 往外发AA或55,看一下波形! 波特率的问题吧!你对比一下实际波特率 和你用库函数自动计算出来的。我记得是库函数计算出来的波特率是有问题了。