STM32
直播中

carey123

11年用户 1658经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

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

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

谢谢关注


回帖(1)

萧治维

2024-4-30 10:31:26
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;
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分