参考例程
///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口 */
USART_SendData(DEBUG_USART, (uint8_t) ch);
/* 等待发送完毕 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
return (ch);
}
///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
/* 等待串口输入数据 */
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(USART1);
}
关键字:STM32 重定向 C库 printf scanf
引用地址:
STM32重定向C库printf/scanf
推荐阅读最新更新时间:2024-11-03 11:00
STM32串口下载方法
玩STM32,J-LINK仿真器固然很好,不够J-Link价格昂贵,还好STM32内部自带Bootloader,可以串口下载程序。本人觉得串口下载方式简洁,廉价,就一个USB-TTL转换器即可完成。 一.首先在能正常工作的最小系统板,开发板上将232电路调通,保证可用,就是无障碍的和PC通讯。然后将写好编译好的HEX文件载入下载即可,这里STM32的识别hex文件的,这点比LM3S系列的ARM 强。首先要到网上下载Flash_Loader_Demonstrator_V2.1.0_Setup或者去 “我的百度云盘- 我的软件- STM32- 串口下载软件” 位置区下载串口下载的上位机软件,去ST官方网站去下载也可以。 二.安装软
[单片机]
STM32-电源【ADC供电、VDDA、VSSA、VREF、VBAT等】
STM32供电方案一览 STM32的电源框图如下所示,电源供电共分为4个区域: VDD、VSS供电区域; VDDA、VSSA供电区域; 1.8V供电区域; 后备电源(VBAT)供电区域; STM32F103ZET6(其他的STM32也基本无差)的Datasheet关于供电方案的说明如下: Power supply schemes • VDD = 2.0 to 3.6 V: external power supply for I/Os and the internal regulator(内部调节器或稳压器). Provided externally through VDD pins. • VSSA, VDDA = 2
[单片机]
stm32串口通信困扰我两天的一个问题
问题描述:程序“一样”,编译没有问题,但是功能不能实现,不能回显。 说明USART1波特率设置不成功 但USART1初始化程序“没问题”。 1. 朋友认为我的工程建立有问题,但我以前用同一模板建的工程都没有问题。 2. 确认是USART1配置肯定有问题。就把例程中正确的函数USART1_config()中的程序段复制到我写函数相同的位置。把原先我的程序屏蔽掉,再编译--- 下载---- 功能正常。 然后就是将两个程序段逐句主逐字地排除。 反思:为什么会出现这样的程序。 我的编程思想是 例如GPIO口的使用 第一步 定义结构体 第二步 打开相应的时钟线 第三步 对打开的GPIOx输入输出功能配置 第四步 打开该GPIO
[单片机]
米尔基于STM32MP135开发板裸机开发应用笔记,MCU友好过渡MPU
以前微处理器(MPU)与微控制器(MCU)是截然不同的两种设备,MPU支持丰富的软件系统,如Linux和相关的软件堆栈,而MCU通常将专注于裸机和RTOS。 近年来,随着MCU的性能越来越高,MCU和MPU之间的区别变得越来越模糊。 STM32MP135是一款入门级的高性价比MPU,适用于MCU性能达不到要求或者需要跑Linux的场景。 米尔的STM32MP135开发板提供基于STM32Cube的Bare metal裸机开发的软件,能够进一步加强实时性能支持以满足用户实现硬实时应用的需求。这一点尤其对习惯于使用MCU开发的用户来说非常友好,可以让开发者在使用MPU强大性能的同时获得类似MCU的开发体验。米尔提供了支持
[嵌入式]
stm32串口的flag和it标志位
今天用到stm32的串口,对串口进行配置进行接受数据。之后大家也可以想象到结果是什么,完全没有用哎! 后来慢慢的发现了问题的所在,现做笔记如下: ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); USART_IT参数: #define USART_IT_PE ((uint16_t)0x0028) #define USART_IT_TXE ((uint16_t)0x0727) #define USART_IT_TC ((uint16_t)0x0626
[单片机]
stm32 定时器重映射
void TIM3_GPIOB5_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE); GPIO_AFIODeInit(); //将重映射恢复为初始值 //在程序中只可以调用一次,不然之前的设置就取消了 GPIO_PinRemapConfig(GPIO_Par ti alRemap
[单片机]
解析STM32的库函数
意法半导体在推出STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是ST推出这样一个开发包的初衷。 但这对于许多从51/AVR这类单片机的开发转到STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但STM32微控制器的寄存器规模可不是常见的8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的
[单片机]
STM32外部中断大问题
问题:一直进入中断,没有触发信号,也一直进入。 描述:开PA0为外部中断,刚刚很好,一个触发信号一个中断,中断函数没有丢,也没有抢跑,开PA1为外部中断也是,都很好,只要能开到3个外部中断以上,就会出现这种情况,明明没有触发外部中断,可是中断服务函数还是不断的++。 问题一:电气噪声和抖动 电气噪声和抖动是常见的问题,可能会导致STM32的外部中断不断触发,即使没有明显的触发信号。以下是一些处理电气噪声和抖动的方法: 1.添加电容滤波器:在外部中断引脚上添加适当大小的电容,以平滑信号并抑制高频噪声。电容的值应根据信号频率和噪声特性进行选择。 2.使用滤波器电路:在外部信号引脚前添加滤波器电路,如低通滤波器,以滤除高频噪
[单片机]