首先改写fputc()和fgetc()函数
//重定向c库printf函数到串口
int fputc(int ch, FILE *f)
{
//发送一个字节
USART_SendData(DEBUG_USART, (uint8_t)ch);
//等待发送完成
while(USART_GetFlagStatus(DEBUG_USART,USART_FLAG_TXE) == RESET);
return ch;
}
//重定向c库scanf函数到串口,重定向后可以使用scanf,getchar等函数
int fgetc(FILE *f)
{
//等待串口输入数据
while(USART_GetFlagStatus(DEBUG_USART,USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(DEBUG_USART);
}
勾选kill工程里面的Use MicroLIB
最后进行串口配置OK
关键字:STM32 重定向 printf 串口
引用地址:
STM32重定向printf到串口
推荐阅读最新更新时间:2024-11-09 13:36
利用STM32高精度定时器实现PWM输出的实现原理
很多STM32系列的MCU内置高精度定时器,比方STM32F334、STM32G4、STM32H7等系列。利用高精度定时器实现PWM输出应该说是最基本的功能了。不过,在实际应用中,常有人觉得无法实现duty=0或duty=100%的PWM输出情形。这里以STM32F334的HRTIM为例,简单介绍下利用它实现PWM输出的实现原理。 STM32F334的HRTIM的功能框图如下,由一个MASTER定时器和ABCDE五个定时器单元组成。其中ABCDE五个定时器单元各可以产生2路输出信号,并支持互补输出。 先看看跟HRTIM有关的时钟。别的系列有支持向上、向下计数模式的。 在利用HRTIM中的定时器单元实现PWM输出时,基于不同
[单片机]
PLC串口通讯和通讯接口知识汇总
在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 一、什么是串口通讯? 串口是一种接口标准,是计算机上一种非常通用设备通信的协议。它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。典型的串口通讯标准常见有如下三种。 EIA RS232(通常简称“RS232”): 1962年由美国电子工业协会(EIA)制定。 EIA RS485(通常简称“RS485”): 1983年由美国电子工业协会(EIA)制定。 EIA RS422(通常简称“RS485”): 1924年由美国电子工业协会(EIA)制定。 二、串口通讯的使用 串口通讯使用3根线完成:地线;发送;接收。由于
[嵌入式]
stm32_汇编(STR和LDR)
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。 STR -(Store Register)存储指令 格式: str{条件} 源寄存器, 存储器地址 将源寄存器中数据存到存储器地址中。 实例1: str r1, ; 将r1中的值存到r2所指定的地址中 str r1, ;将r1中的值存到r2+4所指定的地址中 str r1, ,#4 ;将r1中的值存到r2所指定的地址中, 同时r2=r2+4 LDR -(Load Register)存储指令 格式: LDR{条件} 目的寄存器, 存储器地址 当程序计数器PC作为目的寄存器时,指令从存
[单片机]
【单片机学习】51单片机【串口】,详细介绍
一、先知先会 1、计算串行通信基础 2、串行通信的基本概念 (1)、异步通信与同步通信 a.异步通信 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。 b、同步通信 同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步,。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保
[单片机]
STM32HAL库微秒延时函数的实现---DWT和SysTick
天下苦STM32 HAL库微秒延时久已。不占用其他定时器资源又不使用循环的方式就不能实现微秒延时函数了吗?答案是否定的,我们还有方式实现,且还不止一种方法。详情且看下文分解: 以下两种延时方式来源:Arduino_Core_STM32源码delayMicroseconds(uint32_t us)函数的实现。 利用SysTick再实现微秒延时函数 虽然SysTick已经被配置为1ms中断一次的模式,但每个1ms之间SysTick的当前值寄存器是一直在计数的(每计一个数的时间是1/SytemCoreClock)我们便可以利用该机制实现微秒延时函数。 void delayMicroseconds(uint32_t us)
[单片机]
二 STM32 CAN 波特率的确定
先看两份资料: (1),STM32 得到500Kb/s的波特率 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=1; 每一位的Tq数目 = 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16 如果CAN时钟是 8 MHz : (8M / 1 ) / 16 = 500K 其中: 1 为分频系数 16 为每一位的Tq数目 为了设置为 100K,
[单片机]
STM32定时器(二)定时器中断
一、STM32定时器的分类 1.1 按照内核、外核、特定、常规分为4大类: 1)内核定时器:Systick 2)外设定时器:特定应用定时器+常规定时器 3)特定应用定时器:LPTIM,RTC,WTD,HRTIM 常规定时器:基本定时器TIM6&TIM7)、通用定时器(TIM2TIM5,TIM9TIM14)、高级定时器(TIM1&TIM8) **1.2 CPU时序 ** 此处我们提一下学习单片机原理的课程时,提到的几个CPU时序。 振荡周期:为单片机提供定时信号的振荡源的周期。 状态周期:1个状态周期=2个振荡周期 **机器周期:1个机器周期=6个状态周期=12个振荡周期** 指令周期:完成1条指令所占用的全部时间,以机器周期为
[单片机]
使用STM32任意定时器生成动态波形
别问什么高级不高级了,输出个波形而已,没有啥难的。只是给出了一些细节,比如你想输出自己定制的一些波形,该怎么办? 这里就是使用了TIM1 可以在各种情况下输出中断 在NVIC里面可以看到 里面包含的寄存器就是这几个 可以按照72MHz来设置 STM32定时器之ARR,PSC俩兄弟,具体的可以看我以前的文章。 关于定时器的函数,开启定时器需要自己写 TIM1是挂在APB2上面 在中断的文件里面最后显示up这个中断 update 表面是UP,但其实要送下下个函数里面看看到底是谁的中断 这个函数的具体作用是判断中断是否正常,然后判断产生的是哪一类定时器中断(溢出中断/PWM中断.....),然后进
[单片机]