STM32CubeMX: Version 4.26.1
MDK-ARM: Version 5.24.2
开发板: 中移onenet 麒麟座MINI板
芯片: STM32F103CBT6
1.STM32CubeMX设置
设置外部时钟源
设置Debug
设置串口 使用USART1 PA9,PA10
设置时钟频率
设置USART1详细参数
生成MDK-ARM工程
2.重定向Printf 及 Scanf
主要用到两个函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
在 bsp_debug_usart.h 中添加头文件
#include "stm32f1xx_hal.h"
#include "stm32f1xx_hal_usart.h"
#include
在 bsp_debug_usart.c 中重写fget和fput函数
/**
* 函数功能: 重定向c库函数printf到DEBUG_USARTx
* 输入参数: 无
* 返 回 值: 无
* 说 明:无
*/
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&husart_debug, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
/**
* 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
* 输入参数: 无
* 返 回 值: 无
* 说 明:无
*/
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&husart_debug, &ch, 1, 0xffff);
return ch;
}
在 main.c 中添加 bsp_debug_usart.h
#include "bsp_debug_usart.h"
1
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint16_t cnt = 0;
char str[256];
/* USER CODE END PV */
while(1)
{
HAL_Delay(1000);
sprintf(str, "%d:usart_debug_test...rn", ++cnt);
printf("%s", str);
}
3.调试
4.关于实现串口收发的几种方式
轮询法
中断法
DMA法
关键字:STM32CubeMX 串口通信 USART Printf重定向
引用地址:
【STM32CubeMX】 串口通信(USART) Printf重定向
推荐阅读最新更新时间:2024-11-07 16:20
采用ATmega128的无线数据采集设计
电力日益市场化的环境下,电力公司必须提高服务质量以保持竞争力。当前我国的一些地区,配网自动化程度低,人员工作效率低。根据这种需求,设计了无线数传系统.整个无线数据通信系统是基于RS-485串口通信的一点对多点网络结构。数传电台每站点设一部,分别连接主站的数据采集工作站和分站的RTU/FTU等,进行轮询通信。各分站作业数据上报以及数采工作站的控制指令下行传输都通过无线方式完成。 1 设计思想 数据采集单元采用先进的ATmega128嵌入式单片机作为核心部件,利用RS-485通信接口与控制系统通信。测量站主要是将捕捉的现场信号经转换器ADC采样、量化、编码后,变成数字信号传给微处理器,接收遥控指令并发送数据;主控站的主要工作是发
[单片机]
MCS251单片机和PC机间的串口通信
随着计算机技术的快速发展和广泛应用,上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于PC机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将PC机作为上位机,单片机作为下位机,二者通过RS2232或者RS2485接收、发送数据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机,由PC机对这些数据进行处理或显示。 本文介绍PC机和单片机通信在一种基于C8051F单片机的波形发生器中的应用,在上位机上显示正弦波的幅值和频率,由上位机发送指令可以改变波形幅度及频率。 1 硬件电路的设计 MCS251 单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进
[单片机]
HAL库 STM32CubeMX教程五----看门狗(独立看门狗,窗口看门狗)
前言: 今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: STM32CubeMX创建看门狗例程 独立看门狗,靠窗看门狗 工作原理 看门狗 在由单片机构成的微型计算机系统中单片
[单片机]
STM32G474 | 基于STM32Cubemx HAL 库实现 DMA 驱动 GPIO 高速翻转
目前STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,另一方面也大大拓展了DMA请求事件,不再局限于外设事件,比方基于GPIO的外部中断事件、或者DMA事件本身来触发DMA传输。 关于DMAMUX的基本结构及功能原理,这里就不说了,这里重点介绍基于STM32G4芯片,使用GPIO的外部中断事件触发DMA传输,通过DMA将内存数据传输到GPIO端口的实现过程,包括基于CubeMx的配置、关键代码及注意点。 本演示例程基于STM32G4系列的Nucleo板进行,按键【PC.13】用来触发
[单片机]
STM32CubeMX(Keil5)开发之路——6外部中断
运行环境 Windows10 STM32CubeMX___Version 5.0.0 Keil5(MDK5)___Version 5.15 简介 本例程主要讲解如何设置外部中断,采用中断的方式按键是否按下,在中断中进行打印数据。 STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目 STM32CubeMx 外部中断配置 查看电路图,如下图所示 K1——K3为外部输入引脚,连接PE2——PE4,并且按下按键时为低电平,因此待会儿需要设置为下降沿触发 为了方便调试,重定向printf,进行usart设置 1——点击USART1进行设置 2——模式选择Asyn
[单片机]
基于Windows CE的遥控遥测警报系统的设计
目前,一般警报发放系统是基于PC机/单片机技术的半双工的点对多点天线专用遥控网。系统中控制中心由PC/工控机担任,各执行终端以单片机为核心的控制器来执行控制功能。从使用管理和建设角度看,有如下不足:基于PC机/工控机技术的控制中心单位体积大,设备成本较高,且由于承担的任务相对简单,故使用效率不高,而基于单片机技术的控制执行终端能较好地完成解码控制功能,但不能满足警报发放技术的信息交互化改进和运行管理的需求,例如由单片机完成高质量,高效率的音频编解码,录入和还原来实现信息交互化功能是一个比较棘手的问题。本文设计的目的是鉴于以上需求,采用硬软件资源丰富且可裁减的数据处理能力强大且具备一般单片机控制功能的嵌入式技术,设计一种体积小
[安防电子]
STM32CubeMX系列 | RTC实时时钟
1. RTC实时时钟简介 STM32的实时时钟RTC是一个独立的定时器,RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能,修改计数器的值可以重新设置系统当前的时间和日期 RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后背区域,即在系统复位或从待机模式唤醒后RTC的设置和事件维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外操作。所以在要设置时间之前,要先取消备份区域写保护。RTC的简化框图如下所示: RTC由两个主要部分组成:第一部分(APB1接口)用来和APB1总线相连,此单元还包含一组16位寄存器,可通过APB1总线对其进行读写操作;另一部分(R
[单片机]
MSP430系列单片机串口通信波特率计算方法
MSP430系列,usart模块的波特率值设定是通过以下三个参数决定的:UxBR0,UxBR1,UxMCTL 波特率=BRCLK/N BRCLK:时钟源,可以通过寄存器设定何为时钟源; 如选用SMLK作为主时钟源 N:波特率产生的分频因子。N=UxBR1+UxBR0+UxMCTL,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分,其中 UxBR1为高位,UxBR0为低位,两者结合起来为一个16位的字。 举个实例:波特率=2400,时钟源=32.768kHz N=32768/2400=13.65 很明显:UxBR1+UxBR0=13,即UxBR1=0,UxBR0=13,主要是小数部分对于初学者不是很好理解;
[单片机]