STM32使用printf函数给串口打印信息的执行步骤为:
1.重定向printf函数
给uart.c文件中增加如下函数:
//重定向c库函数printf到USART1
int fputc(int ch, FILE *f)
{
/* 清SR寄存器中的TC标志 */
USART_ClearFlag(USART1,USART_FLAG_TC);
/* 发送一个字节数据到USART1 */
USART_SendData(USART1, (uint8_t) ch);
/* 等待发送完毕 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return (ch);
}
2.增加头文件stdio
#include
3.勾选Use MircoLIB
以上3条,缺一不可,如果你只做了第一步,编译的时候,就会报错,如下所示:
CFG\uart.c(52): error: #20: identifier "FILE" is undefined
如果只做了前两步,而没有勾选Use MicorLIB,编译器虽然不会报错,但是串口不会输出数据。
很多人做了重定向函数以后,输出一串字符的第一个字符会丢失,根本原因是因为SR寄存器中的TC标志默认是置1的。
解决方法1:和我上面的重定向函数一样,在开始先用USART_ClearFlag(USART1,USART_FLAG_TC);函数把TC标志清0。
解决方法2:写字符串的时候,前面留一个空格。
两种方法选一个即可。
关键字:STM32 printf
引用地址:
STM32使用printf丢失第一个字母的问
推荐阅读最新更新时间:2024-03-16 15:24
stm32超声波测距程序
闲来传一些电设的时候写的一些小的功能程序,与大家分享交流。 单片机用的是STM32F103VC系列,超声波是淘宝买的一个模块,只有5个引脚,用起来很方便。 用的时候只需要其中4个脚,VCC,GND,TRIG,ECHO。 TRIG接PA8,OUT_PP模式;ECHO接PA9,IN_FLOATING模式。 #include stm32f10x_heads.h #include HelloRobot.h #include display.h void Tim2_Init(void); void TIM2_IRQHandler(void) { if(GPIO_ReadInputDataBit(GPIOE,
[单片机]
读写STM32内部flash读写代码
由于老师的要求,所以写了一份读写STM32内部FLASH的代码,这样的话就可以把STM32里面没有用来保存代码段的部分用来存储数据了。 由于《stm32flash编程手册》是很久很久以前看的,现在也没心情去仔细看那份手册了。大概浏览了一下,只看到了STM32里面的flash是以16位为单位读写的。 为什么记住这个,因为之前想写一个字节老是出错,所以翻翻手册,果然看到不能写1个字节数据。而且还发现,flash写地址为奇数时也会出错。所以这份代码里面 写flash的地址只能是偶数。浏览过程中还发现,手册里面说写flash和擦除flash的时候会影响cpu的运行速度,没仔细看(真心不想看)。其他具体手册里面的资料的话没有了, 看有没有高
[单片机]
使用STM32硬件SPI+STM32cubeMX+HAL库测试DW1000通信
本篇详细的记录了如何使用STM32CubeMX配置STM32F103C8T6的硬件SPI外设与DW1000通信,为移植DW1000官方驱动打下基础。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): DW1000模块 这里我连接到DW1000官方评估板上,直接与DW1000芯片通信: 连接方法 首先查看DW1000官方评估板预留的外接控制器SPI接口(J6接口)的引脚说明: 外部供电接口(J7)的引脚说明: ① 首先将DW1000官方评估板上的S1、S2拨码开关全部拨为OFF,这样配置之后才可以外接控制器。 ② 按照下图选择端子,配置为外部供电
[单片机]
【STM32使用内部RC振荡器】1、时钟源的设置
PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、 HSE 或者 HSE/2。 而HSI固定为8M,故PLL输入固定为4M。 HSE通常是外部晶振8M 以下HSI代码设置的各个时钟频率为: HCLK = SYSCLK= PCLK2 = PLLCLK = 36M, PCLK1=HCLK/2 = 18M 1、keil设置 使用HSI配置系统时钟使用时钟初始化代码之前先一定要设置keil如图所示选项为: 晶振为8MHz ,不能设置25MHz等其它频率。 2、加入代码 在主函数中先调用以下函数 //系统时钟配置 HSI_SetSysClock(RCC_PLLMul_9);//HSI始终配置为36M
[单片机]
当前STM32几种最流行的开发环境对比
序 时间进入2020年年底,越来越多的开发者跟我一样不再满足于高级语言和WEB前后端开发,逐渐开始把玩各类MCU,MPU,FPGA等硬件产品,同时这些嵌入式开发的门槛也随着互联网的发展渐渐降低,更好地吸引了众多开发者的加入。毫无疑问,那些软硬结合、能解决实际生产生活需求的小项目,总是更能引发人们的好奇心和学习欲望。 今天我们就来谈谈当前最流行的几种STM32家族MCU的开发方案,主要向新人朋友们介绍几种集成开发环境,对于大佬们来说,如果您还在使用破解版的KEIL开发项目,不妨试试我下面提到的另外几种IDE,或许会有更好的开发体验。 Keil5 最正统,最经典的嵌入式MCU开发环境。 价格/跨平台 ★ 收费。国内由米尔科技
[单片机]
STM32 串口DMA发送
一般情况下串口发送数据的完全不需要用到DMA,只有在处理器非常繁忙的时候,使用的DMA帮忙发送的就可以减轻处理器的负担。 下面就讲讲怎么使用DMA发送串口数据。还是基于我自己的标准工程。 1、工程的修改 1)这里要用到DMA,必须使用到库文件stm32f10x_dma.c,所以将是stm32f10x_dma.c文件添加到STM32F10x_StdPeriod_Driver工程组中。 2)打开stm32f10x_conf.h文件,将原先屏蔽的: #include stm32f10x_dma.h 语句的屏蔽去掉。 3)新建DMATx.c与DMATx.h两个文件分别保存到BSP文件夹下的src与inc两个文件中。并将DMATx.
[单片机]
STM32官方库文件分析及使用
1、解压在官网下载的库文件,文件夹内容详解如下图所示 2、下面逐个文件夹分析一下,首先打开“Libraries”文件夹,“CMSIS”文件夹中 是一些Cortex-M3内核文件及一些启动文件这里我们先不理会它,一会建立工程 的时候我们添加他们就可以 “STM32F10x_StdPeriph_Driver”文件夹中是一些库源码,我们来分析一下其中 的内容,如下图 3、我们返回到库文件的根目录,在来看一下“Project”文件夹,打开该文件夹,如 下图 4、我们打开工程模板文件夹“STM32F10x_StdPeriph_Template”,来分析一下在我 们建立工程的时候都需
[单片机]
基于STM32智能家居系统的设计与实现
智能家居(又称智能住宅)是以住宅为平台,兼备建筑、网络通信、信息家电、设备自动化,集系统、结构、服务、管理为一体的安全、高效、舒适、便利、环保的居住环境。利用综合布线技术、网络通信技术、智能家居一系统设计方案安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统。对比普通家居系统,智能家居不仅满足了人们对居住环境的基本要求,提供舒适安全且宜人的家庭生活空间。还能够主动提供全方位的信息服务,联合外部资源,做出智能化响应。但这类系统通常代价昂贵,控制方式单一,且易受到干扰。因此,在设计实现智能控制的同时,研制一个成本低、实用性强并能普及寻常百姓家的智能家居系统成为必然趋势。 本设
[单片机]