stm32 printf重定向】的更多相关文章

在调试过程中往往需要通过打印来看系统运行状态:在STM32平台上,打印重定向有多种实现方案:其一是编译时使用keil自带的MacroLIB,据说这个库对一些C语言基础设施做了新的实现,代码结构更加紧凑:但这种库没法取得源码,所以就不能进一步研究具体怎么实现的,很遗憾:还有一种实现方案是使用标准C(I/O)库,但这种方式下要注意修改避免使用semihosting(半主机模式),下面对两种方案做以简单说明. 方案一 使用mcrolib库: 1.首先在option里边勾选mcrolib 2.重写put…
printf函数调用fputc int fputc(int ch, FILE *p) { USART_SendData(USART1, ch); //重定向到串口 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return ch; } 在KEIL中使用printf要勾选"微库"…
STM32 printf()函数和scanf()函数重定向到串口 printf()函数和scanf()函数重定向 在学习STM32的时候,常常需要用串口来测试代码的正确与否,这时候就要要用到printf()函数或者scanf()函数,但是printf()这个函数是格式化输出到屏幕的,scanf()函数又是格式化输入(从屏幕),并不能输出到串口助手中,所以需要进行重定向. 在系统中有三个标准文件:标准输入,标准输出,标准错误. printf : 强大的格式化转换(可以将任何类型转为字符串). sc…
1 在main中包含stdio.h 文件 2 Target选项框里选Use MicroLib 选项 3 在main中添加UART1_Configuration()初始化的代码 Uart1初始化,void UART1_Configuration(void){          USART_InitTypeDef USART_InitStructure;        USART_ClockInitTypeDef  USART_ClockInitStructure;                R…
一.printf重定向简介 我们知道C语言中printf函数默认输出设备是显示器,如果要实现在 串口或者LCD上显示,必须重定义标准库函数里调用的与输出设备相关的函数.比如使用printf输出到串口,需要将fputc里面的输出指向串口, 这一过程就叫重定向. 那么如何让STM32使用printf函数呢? int fputc(int ch,FILE *p) //函数默认的,在使用printf函数时自动调用 { USART_SendData(USART1,(u8)ch); while(USART_G…
学习STM32过程中,经常打交道的莫过于串口,你可以将任何信息,当然重要的是调试信息打印到串口中输出,总是用一个字节发送函数或者字符串发送函数 总是有些不放便,之前编程中熟悉的莫过于printf了,下面就给出了用printf打印到串口的方案,当然方案不止一个,仅供参考.    1. 添加printf的头文件   #include <stdio.h> 2.重写int fputc(int ch, FILE *f)函数  int fputc(int ch, FILE *f); 函数    int f…
/******************** (C) COPYRIGHT 2012 WildFire Team *************************** * 文件名 :usart1.c * 描述 :将printf函数重定向到USART1.这样就可以用printf函数将单片机的数据 * 打印到PC上的超级终端或串口调试助手. * 库版本 :ST3.5.0 ******************************************************************…
printf("\r\n this is a usart printf demo \r\n"); Use Micro LIB 需要勾选这个库 将串口定义成 printf 函数 #include <stdio.h> //重定向C库函数printf到USART1 int fputc(int ch, FILE *f) { /* 发送一个字节数据到USART1 */ USART_SendData(USART1, (uint8_t) ch); /*等待发送完毕 */ while (U…
之前是完全不知道printf可以重定向设置 最近才发现还有这等好事,可以让printf直接实现串口打印 在网上找了很多资料,终于实现了我想要的效果 原理:printf是通过调用底部的fputc来实现打印效果的,所以如果我们重写fputc就能实现printf函数的重定向 也就是我们让fputc函数直接通过串口进行打印数据,则printf也可以通过串口打印数据 当然scanf也是一样的,我们也可以通过重写fgetc来实现串口接收数据 先随便新建一个C文件,然后添加到include路径里面(总之就是加…
1.使用printf库函数时,要加入头文件<stdio.h> 2.另外在keil里面需要把:use MicroLIB 勾选上,不然程序没办法在线调试.编译的时候不会报错. 3.当然可以不用库函数,自己写.正点原子里面的代码: //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_no_semihosting)  //标准库需要的支持函数 struct __FILE { int handle; }; FILE __st…
使用JlinkV8+Keil41.在main.c输入以下代码 #include <stdio.h> #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n))) #define ITM_Port32(n) (*((volatile unsigned long *)(0xE00000…
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47176.html 在STM32串口通信程序中使用printf发送数据,非常的方便.可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了.   下面就说一下使用printf需要做哪些配置.   有两种配置方法:   一.对工程属性进行配置,详细步骤…
概述 进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向. 重定向 重定向printf很简单,我们知道,printf函数是调用putchar实现字符数据传送的.我们只要重写putchar函数,就可以对printf进输出重定向. 代码清单 下面是自己在Keil 5环境下,使用单片机STC12测试print…
catalogue . Cortex-M3地址空间 . 基于标准外设库的软件开发 . 基于固件库实现串口输出(发送)程序 . 红外接收实验 . 深入分析流水灯例程 . GPIO再举例之按键实验 . 串口通信(USART) . 库函数开发通用流程小结 . DMA传输方式 . STM32 ADC . SysTick(系统滴答定时器) . STM32定时器 0. Cortex-M3地址空间 0x1: MDK中三种linker之间的区别 1. 采用Target对话框中的RAM和ROM地址 采用此方式,需…
    经过半个晚上的折腾,终于复习了STM32开发板,并使用ST官方库调试完毕一个printf重定向到串口的程序,3.5的库同以前的库不大一样,不过最终搞好了可以睡觉了,还可以睡7个小时.     晒下成果:     开发板调试中:         printf重定向到串口:         调试中遇到的问题:     1.STLink2在keil中的驱动问题         keil使用的是3.4版本,自带的stlink驱动无法使用,一直报no device found         解决…
如果要做嵌入式Linux,我们首先要在板子上烧写的往往不是kernel,而是u-boot,这时需要烧写工具帮忙.当u-boot烧写成功后,我们就可以用u-boot附带的网络功能来烧写kernel了.每当板子上电时,u-boot一般会被加载到内存的前半段,如果我们的kernel之前就已经被烧写到开发板了,那么u-boot会加载kernel到内存的后半段并跳转到kernel的起始地址处执行(或者直接跳转到kernel的起始地址处执行,如果kernel可以直接在flash上执行的话.) 如上图所示,绿…
版本:STM32F429 Hal库v1.10 串口通信能够实现两块电路之间不同的通信,在开发中作为打印调试也是一门利器(printf重定向). 补充一点小知识: 1. weak修饰符修饰的函数,说明这个函数如果在其他地方还有定义的话,则编译时使用其他地方定义的同名函数 2. UNUSED(void x); 这个函数是防止编译器出现 未使用警告. 下面给出串口通信的具体步骤. 串口的初始化 1.声明串口属性结构体.并初始化(一般是作为全局变量) typedef struct { USART_Typ…
本文将提到以下内容: 位带操作 中断 printf重定向 随机数发生器RNG AD/DA DMA 高性能计算能力 加密 ART加速 一.位带操作 在学习51单片机的时候就使用过位操作,通过关键字sbit对单片机IO口进行位定义.但是stm32没有这样的关键字, 而是通过访问位带别名区来实现,即将每个比特位膨胀成一个32位字,通过位带别名区指针指向位带区内容. 支持位带操作的两个内存区的范围是:              0x2000_0000‐0x200F_FFFF(SRAM 区中的最低 1MB…
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件夹,命名为"寄存器模板创建",然后在其下面新建 2 个文件夹,如下: Obj 文件夹: 用于存放编译产生的 c/汇编/链接的列表清单. 调试信息.hex文件.预览信息.封装库等文件. User 文件夹: 用于存放用户编写的 main.c. STM32F1 启动文件.stm32f10x.h头…
总的函数如下 void USART1Configuration(void){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1,ENABLE);    USART1_GPIO_Configuration();    USART1_Param_Configuration();    NVIC_Configuration();  /*串口使用中断方式才用到*/   …
使用STM32CUBE_MAX配置工程,可以简化编程工作量,但是这样我们会遇到一些麻烦,比如利用串口接收不知道长度的数据的时候,我们可能会无从下手,前段时间看到他人程序中的串口不定长接收,此次特意总结,包括3类芯片串口不定长配置. STM32F103ZET6 配置工程: 选择USART1,配置波特率为115200,并开启串口中断,DMA中断 配置程序 在配置工程后,我们需要在工程中printf重定向函数fputc()和重写串口接收函数 UsartReceive_IDLE()代码如下: // 在头…
本地方法中printf如何传给java--java系统级命名管道 摘自:https://blog.csdn.net/dog250/article/details/6007301 2010年11月13日 19:24:00 阅读数:3929 遇到很多人,都想知道在调试jni的时候怎么得到c语言printf的输出,这个问题其实有多种解决方法,其中最直观的就是不用printf,直接定义一个本地方法,返回一个jstring,这样在java需要得到信息的时候自己去取就可以了,或者通过c操作java虚拟机的方…
本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号, 所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码 . 串口通讯的一个数据包从起始信号开始,直到停止信号结束.数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5. 1. 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可. STM32 芯片具有多个 USART 外设用于串口通讯,它是 Universal SynchronousAsynchronous Receiver an…
新唐NDA102EC1中更改UUART1作为调试串口打印输出调试信息 参考网上STM32修改fputc(int ch, FILE *f),把串口打印函数printf()重定向到UUART1模块的端口输出,最终未成功. 但循着类似解决问题的思路,直接在工程中查找有关printf()函数和fputc()函数的定义位置. 最终发现printf()函数在stdio.h头文件中定义,属于标准C的定义,无价值... 发现fputc()函数在retarget.c文件中定义: int fputc(int ch,…
基本语法列表 #linux组成:内核+工具 #linux启动: . getty:提示登录名和密码,输入之后调用login . login:login验证用户名和密码,然后调用shell . shell:用户与系统的交互接口 #文件的分类:普通文件.目录.特殊文件. . 普通文件的:ls cat cp mv rm . 目录:ls mkdir rmdir cp mv rm #文件的属性:权限.所有者.组 . 权限:chmod . 所有者.组:chown chgrp #进程:前台,后台 . & fg…
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第8章   STM32H7的终极调试组件Event Recorder 本章节为大家介绍终极调试方案Event Recoder,之所以叫终极解决方案,是因为所有Link通吃,支持时间测量,功耗测量,printf打印,RTX5及其所有中间件调试信息展示. 8.1 重要提示(必读) 8.2 Event Recorder简介 8.3 创建工程模板和注意事项 8.4 Ev…
现在做第一个实验,模拟未定义模式. 未定义模式,是cpu遇到自己不能识别的指令时候做出的异常处理. arm指令的机器码一定是按照某种规范要求的,不然你随意写一条指令,cpu不是都可以执行吗?在cpu没有定义该条指令含义的情况下,我们执行了这样未定义的指令,就会进入未定义异常. 现在我们要模拟一个未定义异常,所以我们只要写出一个cpu无法识别的指令即可. 在这之前,要明白一个道理,在内存中执行的机器码,只有0,1两个值,不同的指令被分解为不同的0,1信号的机器码. 所以,我们在运行内存中存放一个3…
1.建立工程 首先和Vivado设计一中一样,先建立工程(这部分就忽略了) 2.create block design 同样,Add IP 同样,也添加配置文件,这些都和设计一是一样的,没什么区别. 双击,ZYNQ7 Processing System 下面的就和设计一中有一些不一样了: 选择PS-PL Configuration,Enable M_AXI_GP0 interface 选择General , Enable Clock Resets 并且选择 FCLK_RESET0_N ,如下:…
原文: 如何拯救一台glibc被干掉的Linux服务器? 首先如果 libc.so.6 没有被删除, 直接使用LD_PRELOAD就可以恢复 LD_PRELOAD=/lib64/libc-2.12.so ln -s libc-2.12.so libc.so.6 如果彻底被删除, 下面的方法可以一试 glibc被卸载,负责加载所有.so的ld.so也就没了,因此运行几乎所有外部命令时都会得到一句『找不到ld-linux-x-y-z.so.2』的出错提示.比如ls,比如cp,以及所有动态链接的命令.…
MCU:stm32f769NIHx  PHY:LAN8742A LWIP_VERSION:2.0.3 1.配置RCC,串口(printf debug log) (1)开启RCC,配置时钟系统 图1.1 (2)时钟树配置如下图所示 图1.2 (3)串口1配置基本参数 图1.3 /* 小技巧 */ 在工程里我们平时会用到printf打印debug信息,如果产品发布的时候,这些打印信息就要注释掉,为了方便管理,我们会对prinf再次封装并用宏去控制开启和关闭debug_log /* printf重定向…