解锁STM32 Printf新姿势!,用vsprintf吧!
int my_printf(const char *fmt, …)
{
va_list args;
int n;
va_start(args, fmt);//初始化参数指针
n = vsprintf(sprint_buf, fmt, args);/函数放回已经处理的字符串长度/
va_end(args);//与va_start 配对出现,处理ap指针
shell_write((unsigned char *)sprint_buf, n);
return n;
1
2
}
实现这个函数就行啦:
int shell_write(unsigned char *pData, int len)
{
if (G_shell_dupFlag) {
//G_shell_udpClient.sin_port = htons(3001);
sendto(G_shell_udpSocket, pData, len, 0, (struct sockaddr *)&G_shell_udpClient,sizeof(struct sockaddr));
}
return len;
}
关键字:STM32 Printf vsprintf
引用地址:
解锁STM32 Printf新姿势!,用vsprintf吧!
推荐阅读最新更新时间:2024-11-05 16:23
STM32 USB工程的文件分析
先介绍下我参考其他工程而建立的STM32 USB工程: 简单介绍下:Startup当然放置STM32的启动文件,CMSIS放置着STM32内核ARMCortex的内核文件,StdPeripheral_Driver目录里放置着STM32外设的库函数,这几个都是STM32工程必须的,这里不仔细讲诉,User Source里放着自己的应用代码,如main.c,stm32f10x_it.c等文件都放这里。USB-FS-Driver_Driver下放着USB的库,这里暂时不讲述,我重点想分析的文件在USB-User里,这个目录主要放着一些与USB库和用户相关的文件,起着USB库与用户之间的桥梁作用,文件如下图所示,该目录包含
[单片机]
STM32 使用DMA+DAC+TIMER输出正弦波
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁。在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道。建立这个通道的好处是:可以抛开CPU,不占用CPU的资源,直接使用这块内存的内容,速度也会加快。 DAC:STM32F103中有两个DAC,可以同时使用。DAC的作用就是将数字量转化为模拟量(电压),在这就不作太多的讲解。 TIMER:定时器。不作讲解。 那么对于使用DMA+DAC+TIMER产生正弦波的原理或过程,我有这样一个简单的理解:先将一个可以生成正弦波的数据表保存在静态内存中,然后在DAC以及这块内存中间使用DMA建立一个通道
[单片机]
[STM32系列]你真的会使用SPI接口的NSS引脚吗
SPI接口介绍 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是Motorola公司推出的一种高速的,全双工,同步的通信总线。SPI总线共有4根信号线,分别是:设备选择线、时钟线、串行输出数据线、串行输入数据线。 NSS:从设备使能信号,由主设备控制,低电平有效 SCK:时钟信号,由主设备产生 MOSI:主设备输出从设备输入信号 MISO:主设备输入从设备输出信号 STM32上的NSS STM32上SPI接口的NSS结构图如图1所示,除了外部的NSS引脚,还有内部NSS,且内部NSS状态可以由寄存器独立控制,也正因此,NSS引脚既可作输入也可作输出。 图1 NSS结构图
[单片机]
STM32 USART出现乱码
USART使用串口助手调试时出现乱码的情况,一般都是波特率的问题,例如:向串口发送“hello world\r\n”,但是串口助手收到的数据却是这样: 于是我仔细检查代码中设置的波特率的大小,发现没错,也是设置为115200,但是串口助手上显示的还是乱码。我再仔细检查与USART相关的代码,包括UASRT初始化、中断、以及发送数据的类型。。。,很绝望,还是没有找出这个BUG! 以下是我的UASRT相关设置代码: void Uart1_Init(void) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStr
[单片机]
在STM32上移植ucGUI之触摸屏
之前的三篇文章分别介绍了如何在STM32裸机上移植ucGUI,移植ucGUI源例程以及ucGUI的存储设备和抗锯齿。现将STM32裸机上移植ucGUI触摸屏的过程详述如下: 1、 将正点原子的《触摸屏移植实验》中HARDWRAE/TOUCH目录复制到已经建立好的ucGUI工程目录的HARDWARE文件夹下,并添加touch.c文件和头文件路径。 2、 打开ucGUI工程中的GUIConf.h文件,将其中的GUI_SUPPORT_TOUCH和GUI_WINSUPPORT总开关打开。如下所示: 1 #define GUI_SUPPORT_TOUCH 1 /* Support a touch screen (req. wi
[单片机]
关于STM32的flash操作
简介:说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然, FLASH还可以用来装数据。 FLASH分类 根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。 主存储块用于存储程序,我们写的程序一般存储在这里。 信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。 选项字节存储芯片的配置信息及对主
[单片机]
STM32替换Arduino直通车
前言 众所周知,用Arduino进行开发简单快捷,一个项目能很快的做好,而Arduino相比STM32,贵且性价比也很低,Arduino Uno可用的针脚也少得可怜,怎么办?换做STM32吧!STM32高性能,STM32的最小系统版价格很低,对我这种穷学生来说是福利啊!于是我兴致勃勃的淘了STM32的最小系统版准备入坑STM32。 可接下来我就要下载各种各样的软件进行编程,烧录,写个最简单的Blink程序都非常麻烦,折腾我一天。 要是能像Arduino一样简单方便快捷就好了,怎么办呢?那么现在正式开始教程! 所需工具 STM32最小系统板,配套数据线,20元以下的就可以了。 Arduino(不是必须,但如果你不想买USB转
[单片机]
二 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,
[单片机]