/****************************************************分割线*******************************************/
// 加入以下代码。支持printf函数,则不需要选择use MicroLIB
//添加头文件
#include
//添加代码
#if 1
#pragma import(__use_no_semihosting)
//标准库需要支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fput()函数。UART5:根据需求更改串口(USART1-USART3、UART4-UART5)
int fputc(int ch, FILE *f)
{
/*将printf内容发往串口*/
USART_SendData(UART5,(uint8_t)ch);
while(USART_GetFlagStatus(UART5, USART_FLAG_TC) == RESET);
return ch;
}
#endif
/****************************************************分割线*******************************************/
_sys_exit()函数可能出现以下警告,不用理会。编译时不会出现警告
关键字:STM32 Printf函数 标准库
引用地址:
STM32 Printf函数利用标准库实现方法
推荐阅读最新更新时间:2024-03-16 16:23
stm32之RCC学习笔记
stm32芯片的所有片上外设都需要手动设置时钟。 三种不同的时钟源可被用来驱动系统时钟(SYSCLK): HSI振荡器时钟 由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。(所以通常不用与提供SYSCLK) HSE振荡器时钟: 高速外部时钟信号,由HSE外部晶体/陶瓷谐振器(较常用)或者HSE用户外部时钟两种方式产生 PLL时钟 时钟源输入,内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟,一旦PLL被激活,这些参数就不能被改动。 二级时
[单片机]
STM32实例-待机唤醒实验
本文我们来学习下STM32的待机唤醒功能。要实现的功能是:系统运行时 D1 指示灯闪烁,5 秒后进入待机模式,D1 指示灯熄灭,同时串口 printf输出相关提示信息,可通过 K_UP 按键实现唤醒。学习本内容可以参考《STM32F10x中文参考手册》-4 电源控制器(PWR)章节。 STM32 低功耗模式介绍 很多单片机具有低功耗模式,比如 MSP430、STM8L等。我们的STM32也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为 CPU 提供时钟,并执行程序代码。当 CPU 不需继续运行(例如等待外部事件)时,可以利用多种低功耗模式来节省功耗。用户需要根据最低电源消耗、最快速启
[单片机]
STM32单片机的BOOT0和BOOT1运用原理
STM32三种发动形式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)体系存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是普通说的ISP顺序。这个区域的内容在芯片出厂后没有人可以修正或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状况决议了芯片复位后从哪个区域开端执 行顺序,见下表: BOOT1=x BOOT0=0 从用户闪存发动,这是正常的任务形式。 BOOT1=0 BOOT0=1 从体系存储器发动,这种形式发动的顺序功用由厂家
[单片机]
STM32驱动LCD的原理介绍
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 ▲驱动流程 01 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD
[单片机]
GPIO做为输出时操作方法--stm32备忘
这里就不说库函数操作了,因为库函数的本质是操作寄存器。当GPIO做为输出时,无非是输出0或者1。涉及到的寄存器有GPIOx_ODR、GPIO_BSRR、GPIO_BRR.下面分别介绍这三个寄存器的操作方法。 GPIOx_ODR: 端口输出数据寄存器,它的31:16位保留不用,15:0对应x的相应引脚,他只能以16位方式操作。 GPIOx_BSRR:端口位设置/复位寄存器,它的31:16位是清除位(BR15:BR0),用来复位对应的引脚;15:0位是设置位(BS15:BS0),用来设置对应的引脚。无论是BR还是BS,都是1有效,即相应位为0时无效,这样可以保证操作某个端口时对其他端口无影响。 GPIOx_
[单片机]
如何判断STM32的复位类型_STM32软件复位bug有哪些
STM 32在复位时,有严重BUG: 1.上电复位和外置的看门狗芯片重启复位是无法区分开来的!RCC_FLAG_BORRST, RCC_FLAG_PINRST, RCC_FLAG_LPWRRST三个都复位了! 2.这样当要在上电复位初始化关键代码时,这些代码看门狗复位则不用重启,这个关键代码会导致应用业务的异常!若两个中断分不开,导致系统异常看门狗复位时影响业务! /* RCC_FLAG_BORRST: POR/PDR or BOR reset //Power-on/power-down reset (POR/PDR reset) or brownout (BOR) reset RCC_FLAG_PINRST: Pin r
[单片机]
STM32之SPI的迭代
回顾前面用SPI2写的一个W25Q64的程序 void SPI2_Init(void) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PB13/14/15复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB GPIO_SetBits(GPIOB,GPIO_Pi
[单片机]
STM32笔记之七:让它跑起来,基本硬件功能的建立
0、 实验之前的准备 a) 接通串口转接器 b) 下载IO与串口的原厂程序,编译通过保证调试所需硬件正常。 1、 flash,lib,nvic,rcc和GPIO,基础程序库编写 a) 这几个库函数中有一些函数是关于芯片的初始化的,每个程序中必用。为保障程序品质,初学阶段要求严格遵守官方习惯。注意,官方程序库例程中有个platform_config.h文件,是专门用来指定同类外设中第几号外设被使用,就是说在main.c里面所有外设序号用x代替,比如USARTx,程序会到这个头文件中去查找到底是用那些外设,初学的时候参考例程别被这个所迷惑住。 b)
[单片机]