之前一直是在IAR下对STM8L151进行编程,因为在IAR的参考例子比较多,关键是很多配置可以参考,主要是参考风驰的STM8例子开发的,在此表示感谢。
最近由于需要在STVD下对STM8L151进行编程,在程序中有用到Printf函数来打印调试信息,编译的时候发现将包含进行还是不行,上网查了下,说是需要重定向一下,于是找了好久,还是没有找到如何重定向!!没办法还是要回到ST提供的固件库中找答案,发现在USART的例子中有代码可以参考。如下面所示
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */
在IAR/STVD中都需要重定向putchar getchar函数,只是它们的函数声明有些区别,这个跟编译器有关。在例子中也给出了putchar getchar的代码,如下面所示
PUTCHAR_PROTOTYPE
{
/* Write a character to the USART */
USART_SendData8(EVAL_COM1, c);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET);
return (c);
}
GETCHAR_PROTOTYPE
{
int c = 0;
/* Loop until the Read data register flag is SET */
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET);
c = USART_ReceiveData8(EVAL_COM1);
return (c);
}
这样就完成了printf的重定向了,可以在代码中使用printf函数了,当然啦你需要配置USART并使能它。
关键字:STM8L151 STVD IAR下 重定向 printf函数
引用地址:
STM8L151在STVD/IAR下重定向printf函数
推荐阅读最新更新时间:2024-03-16 16:04
STM32编译器keil中printf函数的应用
首先要,请在MDK(keil)工程属性的“Target“-》”Code Generation“中勾选”UseMicroLIB 在程序中添加Printf 1,#include 2,添加 #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFl
[单片机]
STM32 学习过程中 printf 函数 突然不能执行的简单提示问题
一段时间没有使用KEIL建立MDK工程了,今天新建一个工程,测试串口输出,发现突然不能打印输出了,反复观察,程序确实没有问题,以为硬件问题,就将原来可以执行的程序烧写,结果居然可以,那么这就是程序问题了。 经过仔细观察,发现是这里的原因,实在好久不用就不好发现,记之! 使用自带的迷你库,才能包含printf函数!
[单片机]
STM32HAL库学习技巧1:基于STM32CubeMX printf重定向
最近我找了好多都相识的文档,虽然百度上面一找一大把,我这边还是来写一下用STM32CubeMX配置好项目后如何做printf 重定向串口设置,有什么不对的地方希望大家提出来指正!!! 首先还是软件 用这个软件配置的大家有使用过的应该都不陌生把!! 然后我们随便配置一个项目!! 生成 既然是串口打印 一定要配置个串口哦 !!我这儿用的USART1 就像这样 !! 时钟简单弄一下 就生成文件了!! 我这边使用的是keil5 用的stm32f103c8t6 然后就生成文件 打开工程 额!!这里要勾选上!!原理嘛 我在网上找了一堆!!大家可以自己去了解一下! 然后 我们接下来开始配置重定向的函数 我写的简单就写
[单片机]
STVD下配置Cosmic编译器
之前一直用IAR编写stm8的程序,一直没用上st官方自带的IDE。 后来听说Cosmic编译出来的代码要比IAR优化要好,特此来试一下stvd+Cosmic。 系统环境:w7 x64 配置过程也比较简单 首先下载一个Cosmic for stm8,官方有免费32k的。 然后打开STVD找到Tools- Options 打开后再找到Toolset卡项 选择Cosmic for stm8的安装目录并确定 选好之后会弹出一个警告,直接点确定即可。 就是这样基本设置完成。 接下来创建一个工程验证一下。 新建工程 选择创建工作空间和工程 指定工作空间名称跟位置 工具链选择STM8 C
[单片机]
IAR瑞萨单片机开发加入printf调试函数
IAR开发环境,没有printf函数,自己百度加入了一个(http://www.cnblogs.com/codecamel/p/4686437.html),但是还是有一些问题,特别是打印多个变量时,只能够打印字符串时比较稳定,原因是因为va_arg()给了错误的返回值,故只能找寻其他的方法,今天测试了一下,新的办法步骤如下 1.关键之处,否则会出现PUTCHAR函数未定义现象。 右键点击工程选择option- General Option- ibrary configuration中library改为full,且 General Option- library option- Printf formatter选项中选择full2
[单片机]
STM32CubeMx(Keil5)开发之路——3发送USART数据和printf重定向
运行环境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 简介 本例程主要讲解如何通过串口发送数据和重定向printf STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—1配置第一个项目 STM32CubeMx USART1配置 1——点击USART1进行设置 2——模式选择Asynchronous异步传输 3——可以看到右边自动出现了Tx和Rx 4——可以自行设置波特率,停止位,校验位等参数 代码修改 1——选择main.c文件 2——在USER CODE中添加如下代码,重定向print
[单片机]
avr单片机 串口实现printf(使用变参函数)
#include #include #include typedef unsigned char uint8; static void usart_init(void) { UCSRA = 0x02; UCSRB = 0x18; UCSRC = 0x06; UBRRH = 0x00; UBRRL = 103; } static void put_char(uint8 data) { if (data == '/r') put_char(0x09); while ( !(UCSRA & (1 UDRE
[单片机]
STVD中将现有工程另存为另一个工程
搞好了一个工程模版,会将一个已经调好的工程另存为另一个工程,然后进行相应的修改,可以免去新建工程的繁杂过程。本文记录用于记录上述过程。 1.在现有工程中File-Save Workspace AS 2.此时会发现Workspace已经是另一个工程了,而project名称还是旧工程的,如下图 3.在cosmic路径下,把旧工程的led.stp文件复制一份,并重新命名为Templates.stp 4.用记事本打开Templates.stp文件,查找并替换所有的led字符 5.在工程目录树中,移除老的Project 6.移除老的Project后,在Project菜单中,Inset一个Project 7.选择刚
[单片机]