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

为什么的STM8S003F3P6的uart1发送数据是乱码的?你们遇到过吗?

[复制链接]
lqh-414236 提问时间:2015-1-29 16:21 /
/* 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);//16MHz  8分频为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 在连接电脑端。
是不是我该怀疑电路板有问题了呢。


收藏 2 评论20 发布时间:2015-1-29 16:21

举报

20个回答
lqh-414236 回答时间:2015-2-5 13:57:56
这个芯片奇了怪了!自己的RX和TX接在一起单步调试,受到的数据完全没没有问题,可外接确是乱码的,也不能说是乱码,是一次会发两个码,比如MCU 的TX发送AA 给MCU的RX和 PC端,MCU中断调试没有问题,RX接收有问题!别说波特率不对,我用的波特率是对的,代码如下:
void myCLK_Init(void){
        CLK->ECKR=0x00; // 禁用外部时钟
        CLK->ICKR=0x01; //使能内部时钟
        CLK->CMSR=0xe1; // HSI selected as master clock source

        CLK->SWR= 0xe1; //HSI selected as master clock source
        CLK->CKDIVR=0x18;//Bits 4:3 11: fHSI= fHSI RC output/8   Bits 2:0 000: fCPU=fMASTER
        CLK->PCKENR1 = CLK->PCKENR1|0xc0;// UART1 CLK
}

//8bit data, 1 stiopbit, 无优先级,无流控,无DTR,无DTS
void myUART1_Init(void)
{
    UART1->CR2=0x00;//使发送禁用TEN=0;
    UART1->CR1=0x00;//设置M字长,8位数据位
    UART1->CR3=0x00;//1位停止位

    UART1->BRR2=0x00;//000d: 9600(fcp u=fmaster=2MHz) 必须先写BR2
    UART1->BRR1=0x0d;//20000 /96 =0x000d

    UART1->CR2=0x2C; //
   
}
void GInterruptSW(FunctionalState state){
        if(state == ENABLE){
                _asm("RIM");
        }else{
                _asm("SIM");
        }
}

深深的怀疑内建晶振不能用于uart!!!
1407W 回答时间:2015-2-6 18:03:02
UART1_IrDAConfig(UART1_IRDAMODE_NORMAL);  这个解释一下 貌似是红外线串口配置吧
GPIO_DeInit(GPIOA);
        GPIO_DeInit(GPIOC);这两个干嘛的 不知道
还有个问题 接收中断呢  好好看看自己的程序 不要怀疑芯片
埃斯提爱慕 回答时间:2015-1-30 11:54:01
提示: 作者被禁止或删除 内容自动屏蔽
lqh-414236 回答时间:2015-1-29 16:28:05
来一个人,帮我说一下,thank you!
lqh-414236 回答时间:2015-1-29 16:29:35
我对STM32熟悉,但是没做过STM8的,感觉应该STM32简单的,搞了一天了,发送的都是乱码!唉,STM 的芯片还是不怎么靠谱啊!
lqh-414236 回答时间:2015-1-29 16:31:25
为自己助威!
lqh-414236 回答时间:2015-1-30 15:19:32
dsjsjf 发表于 2015-1-30 11:54
不要动不动就怀疑芯片,毕竟这么多人都在用呢,还而还是常用的USART,不会有什么问题的 ...

问题来了!示波器测量,以及串口打印都有问题。何解?单步调试,寄存器值均没有问题。为何串口数据确是不对的!
埃斯提爱慕 回答时间:2015-1-31 08:36:51
提示: 作者被禁止或删除 内容自动屏蔽
sting 回答时间:2015-2-1 20:29:15
stm8f003内建hsi不准确
MouseCat 回答时间:2015-2-1 23:23:56
往外发AA或55,看一下波形!
红玫瑰的偏爱 回答时间:2015-2-2 12:44:18
波特率的问题吧!你对比一下实际波特率 和你用库函数自动计算出来的。我记得是库函数计算出来的波特率是有问题了。
lqh-414236 回答时间:2015-2-4 11:37:28
stm8f003内建hsi不准确,不知道有没有人用内建的HSI做串口时钟源,反正我用了是不行了的!
foxglove 回答时间:2015-2-5 16:38:02
stm8f003内建hsi
拼命三郎V5 回答时间:2015-2-6 12:46:27
aaaaaaaaa.jpg
钟@柳州 回答时间:2015-2-6 16:08:12
我就用HSI发送接收都没有问题
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版