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

求助-STM8S-如何在STVD环境下重定向printf函数实现UART简化输出

[复制链接]
Jolin乐百事 提问时间:2018-2-6 16:40 /
1. AS the title, who can share your code in STVD?NOT in IAR,,,thanks a lot.
2. 目前困在STVD环境下,不能重定向printf(),网上IAR环境的重定向调通了,求STVD环境下的code。
3. 用STM8的官方例程UART1_Printf在STVD环境下编译OK,但是debug时候报错下载不了程序,报错信息如下图:

4. 针对3中问题,用STVP彻底清空片子里的代码后还是不能烧进去,请问高手有什么解决办法?

备注: 开发环境STVD
           MCU: STM8S208MB

谢谢关注

Error info

Error info

STVD Code

STVD Code
收藏 1 评论10 发布时间:2018-2-6 16:40

举报

10个回答
时光虫子 回答时间:2018-2-6 17:41:40
STM8我都是用IAR,没有用过STVD

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

wenyangzeng 回答时间:2018-2-6 21:37:02
本帖最后由 wenyangzeng 于 2018-2-6 21:42 编辑

提示错误的信息表示楼主的Flash写保护了。STM8S208好像没有写保护功能,下图试看看:
无标题.png

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Johnson Cao 回答时间:2018-2-7 09:20:13
STVD可以重定向printf的,我一直这么用的.
// 函数功能:初始化UART
// 输入参数:无
// 输出参数:无
// 返 回 值:无
// 备    注:无
void UartInit(void)
{  
        UART1_CR2 = 0;         // 禁止UART发送和接收
        UART1_CR1 = 0;         // b5 = 0,允许UART
                                                                        // b2 = 0,禁止校验
       
        UART1_CR3 = 0;         // b5,b4 = 00,1个停止位
       
        // 设置波特率,必须注意以下几点:
        //        (1) 必须先写BRR2
        //        (2) BRR1存放的是分频系数的第11位到第4位,
        //        (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
        // 例如对于波特率位9600时,分频系数=2000000/9600=208
        // 对应的十六进制数为00D0,BBR1=0D,BBR2=00
        UART1_BRR2 = 0x00;
        UART1_BRR1 = 0x0D;
// 实际的波特率分频系数为0682(1666)
// 对应的波特率为16000000/1666=9600
//UART1_BRR2 = 0x02;
//UART1_BRR1 = 0x68;       
                       
        UART1_CR2 = 0x2C;         // b3 = 1,允许发送
                                                                                        // b2 = 1,允许接收
                                                                                        // b5 = 1,允许产生接收中断
}
// 函数功能:从UART1发送一个字符
// 输入参数:ch -- 要发送的字符
// 输出参数:无
// 返 回 值:无
// 备    注:无
char putchar(char c)
{
        while ((UART1_SR & 0x80) == 0x00);         // 若发送寄存器不空,则等待
        UART1_DR = c;                                                                                         // 将要发送的字符送到数据寄存器
        while ((UART1_SR & 0x80) == 0x00);         // 若发送寄存器不空,则等待
        return c;
}

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

Johnson Cao 回答时间:2018-2-7 09:20:48
        UartInit();

        printf("System Running!");
Jolin乐百事 回答时间:2018-2-26 16:08:58
wenyangzeng 发表于 2018-2-6 21:37
提示错误的信息表示楼主的Flash写保护了。STM8S208好像没有写保护功能,下图试看看:

...

谢谢您的回复,新年快乐
您的做法我之前做过,在STVP中关掉写保护并下载到片子里,但是仍然遇到上述问题。估计是代码的问题不是硬件。还需进一步研究。。。。
Jolin乐百事 回答时间:2018-2-26 17:06:15
Johnson Cao 发表于 2018-2-7 09:20
STVD可以重定向printf的,我一直这么用的.
// 函数功能:初始化UART
// 输入参数:无

谢谢亲回复,新年快乐!
但是按照亲的代码,编译通过,下到片子里仍然报错,换用简单的点灯程序可以正确下载,正常显示,1.是不是因为写了putchar函数所以报错?STVP中已经将写保护关闭;期待你的回复。
2-关写保护-STVP.JPG
2-网友贡献-Build-STVD.JPG

仍然报错

仍然报错
Johnson Cao 回答时间:2018-2-27 08:39:28
Jolin乐百事 发表于 2018-2-26 17:06
谢谢亲回复,新年快乐!
但是按照亲的代码,编译通过,下到片子里仍然报错,换用简单的点灯程序可以正确 ...

简单的点灯程序可以,那你现在的程序和简单的点灯程序对比有什么差别呢?
Jolin乐百事 回答时间:2018-2-27 10:31:30
Johnson Cao 发表于 2018-2-27 08:39
简单的点灯程序可以,那你现在的程序和简单的点灯程序对比有什么差别呢?

差别在于重定义了putchar()函数啊
Johnson Cao 回答时间:2018-2-27 10:39:16
Jolin乐百事 发表于 2018-2-27 10:31
差别在于重定义了putchar()函数啊

就增加一个putchar就不能下载了?
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版