STM8S系列基于IAR标准外设printf输出demo
STM8S系列基于IAR标准外设printf输出demo
- 📌STM8S/A标准外设库(库版本
V2.3.1) - 📍官网标准外设库:
https://www.st.com/zh/embedded-software/stsw-stm8069.html
⛳注意事项
- 🚩在内存空间比较有限的情况下,请谨慎使用,只是为了方便调试时查看信息。因为使用printf函数需要占用很多内存空间。
- 🔰为什么不使用ST官方标准库内所提供的模版,因为官方提供的工程模版,涵盖了整个所有的STM8系列型号产品,整个模版工程很臃肿,也尝试过使用该模版来创建新工程,编译时没有问题,发现在烧录的时候,提示代码空间不够,超了,自己新建的工程将代码移植过去就没有问题。
📖输出函数选择差异:putchar() 和 fputc()
- 🌿使用
putchar()作为对外输出重载函数,只需要包含stdio.h即可。(推荐)
int putchar( int ch )
{while( !( UART1->SR & 0X80 ) ); //循环发送,直到发送完毕UART1->DR = ( u8 ) ch;//直接操作寄存器,提高执行效率return ch;
}
- 🍁使用
fputc()时还行需要在工程选项中配置开启full选项,所占用的内存空间更多,如果程序大一点,后面在烧录的时候有可能会报内存空间超了的问题。
/*******************************************************************************
**函数名称:int fputc(int ch, FILE *f)
**功能描述:系统标准Printf函数的接口函数
**入口参数:int ch, FILE *f 系统连接
**输出:无
*******************************************************************************/
int fputc( int ch, FILE *f )
{Send( ch );return ch;
}

🔖所以在使用时建议还是使用
putchar()函数。
🔨IAR工程搭建
- 在创建工程前,先搭建工作空间。

- 创建工程,选择空工程作为模版,取好工程名并保存。



3. 将从官方下载下来的标准外设库资源解压,并将里面的Library文件夹拷贝到项目工程目录下。

-
加载标准外设库中所要用到的源文件(.c文件),可以按需添加,如果不清楚要添加哪些也可以全部添加进来,编译时报错,就移除没有的。

-
配置单片机型号以及添加头文件路径,输出编译文件格式,烧录器。




📝demo主程序代码
/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
#include <stdio.h>/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
#define LED_GPIO_PORT (GPIOD)
#define LED_GPIO_PINS (GPIO_PIN_2|GPIO_PIN_7)void Delay( uint16_t nCount )
{/* Decrement nCount value */while ( nCount != 0 ){nCount--;}
}
void Init_UART1( void )
{UART1_DeInit();UART1_Init( ( u32 )9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TX_ENABLE );
// UART1_Cmd(ENABLE);
}
void Send( uint8_t dat )
{while( ( UART1_GetFlagStatus( UART1_FLAG_TXE ) == RESET ) );UART1_SendData8( dat );}
/*******************************************************************************
**函数名称:int fputc(int ch, FILE *f)
**功能描述:系统标准Printf函数的接口函数
**入口参数:int ch, FILE *f 系统连接
**输出:无
*******************************************************************************/
//int fputc( int ch, FILE *f )
//{
// Send( ch );
// return ch;
//}int putchar( int ch )
{while( !( UART1->SR & 0X80 ) ); //循环发送,直到发送完毕UART1->DR = ( u8 ) ch;//直接操作寄存器,提高执行效率return ch;
}
void delay_ms ( int ms ) //Function Definition
{int i, j;for ( i = 0; i <= ms; i++ )for ( j = 0; j < 120; j++ ) // Nop = Fosc/4__asm( "nop" ); //Perform no operation //assembly code
}void main( void )
{//CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);Init_UART1();GPIO_Init( LED_GPIO_PORT, ( GPIO_Pin_TypeDef )LED_GPIO_PINS, GPIO_MODE_OUT_PP_HIGH_SLOW ); //led/* Infinite loop */while ( 1 ){delay_ms( 1000 );printf( "Hello World! \r\n" );GPIO_WriteReverse( LED_GPIO_PORT, ( GPIO_Pin_TypeDef )LED_GPIO_PINS );delay_ms( 1000 );printf( "STM8S903K3T6 \r\n" );}}#ifdef USE_FULL_ASSERT/**断言函数:它的作用是在编程的过程中为程序提供参数检查* @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval : None*/
void assert_failed( u8* file, u32 line )
{/* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* Infinite loop */while ( 1 ){}
}
#endif
- 📜串口打印效果:

📚工程源码
链接: https://pan.baidu.com/s/11U3Its5OklRpwdJQH1aW_g
提取码: b8h3
相关文章:
STM8S系列基于IAR标准外设printf输出demo
STM8S系列基于IAR标准外设printf输出demo📌STM8S/A标准外设库(库版本V2.3.1)📍官网标准外设库:https://www.st.com/zh/embedded-software/stsw-stm8069.html ⛳注意事项 🚩在内存空间比较有限的情况下&am…...
PMP项目管理项目质量管理
目录1 项目质量管理概述2 规划质量管理3 管理质量4 控制质量1 项目质量管理概述 项目质量管理包括把组织的质量政策应用于规则、管理、控制项目和产品质量要求,以满足相关方目标的各个过程。项目质量管理还将以组织的名义支持过程的持续改进活动。 核心概念 质量是…...
前缀和总结
前缀和是一个常用的算法技巧,通常用于求解数组或序列的区间和。 具体来说,假设有一个长度为n的数组a,我们可以预处理出一个长度为n+1的前缀和数组s,其中s[i]表示原数组a前i个元素的和,即: s[i] = a[0] + a[1] + ... + a[i-1] 这样一来,对于任意的区间[l, r],我们可以…...
0109二分图-无向图-数据结构和算法(Java)
文章目录1 概念2 API3 分析和实现4 测试5 总结后记1 概念 二分图是一种能将所有结点分为两部分的图,其中图的每条边所连接的两个顶点都分别属于不同的部分。 2 API public classBipartiteBipartite(Graph G)预处理函数public booleanisBipartitle()是否是二分图pub…...
计算机网络题库---选择题刷题训练(100多道精品)
第一章 概述 1.下列四项内容中,不属于Internet(因特网)基本功能是___D_____。 A.电子邮件 B.文件传输 C.远程登录 D.实时监测控制 2.Internet是建立在____C_____协议集上的国际互联网络。 A.IPX B.NetBEUI C.TCP/IP …...
16、字符串生成器
目录 (1)append()方法 (2)insert(int offset, arg)方法 (3)delete(int start , int end)方法 创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“”可以达到…...
docker基本命令-容器
容器 基本概念 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 容…...
QT入门基础(一)
文章目录零.Qt背景1.什么是Qt2.Qt的发展史3.Qt的优势4.Qt应用一.第一个Qt程序0.项目创建1.main函数文件2.类头文件3.pro文件4.qt命名规范二.Qt按钮1.按钮创建和父子关系2.按钮常用api3.Qt窗口坐标体系4.对象树模型零.Qt背景 1.什么是Qt Qt是一个跨平台的C图形用户界面应用程序…...
WattOS:一个稳又快的轻量级 Linux 发行版
导读Linux 领域里的每个人不是听说过就是使用过某个轻量级的 Linux 发行版。大家都知道我们不断追求的是:占用内存少,配置资源要求低,包含一个轻量级的桌面环境(或者窗口管理器),并且提供和其他发行版相似的…...
Java调用Python脚本:轻松实现两种语言的互操作性
Java和Python都是非常流行的编程语言,它们都有自己的优点,但也有自己的局限性。在编写应用程序时,我们可能需要使用两种语言来共同完成一项任务。在这种情况下,Java需要调用Python脚本来解决某些问题,同时利用Java和Py…...
未系安全带识别系统 yolo
未系安全带识别系统通过pythonyolo智能视频分析技术,未系安全带识别算法对画面中高空作业人员未系安全带行为进行监测,未系安全带识别算法监测到人员未穿戴安全带时,立即通知后台人员及时处理触发告警。Yolo算法采用一个单独的CNN模型实现end…...
(七十六)大白话MySQL是如何根据成本优化选择执行计划的?(上)
之前已经给大家讲解清楚了 MySQL 在执行单表查询时候的一些执行计划,比如说const、ref、range、index、all之类的,也讲了多表关联的时候是如何执行的,本质其实就是先查一个驱动表,接着根据连接条件去被驱动表里循环查询࿰…...
DSRC技术
DSRC(Dedicated Short Range Communication)专用短程通信 定位 是V2X领域存在的两大通信技术之一(另一个为LTE-V2X)。 所属技术路线 与这两大技术相对应,是V2X无线通信技术的两大技术路线: IEEE 802.11p 本是04年指定的一个通…...
_面经问题_
一、Java编程语言 Java语言有哪些特点? JVM vs JDK vs JRE 什么是字节码? 采用字节码的好处是什么? 为什么不全部使用AOT呢? 为什么说Java语言"编译与解释并存"? Oracle JDK vs OpenJDK Java和C的区别? 注释有哪几种形式? 标识符和关键字的区别是什么? Jav…...
刷题记录(2023.3.6 - 2023.3.11)
我很喜欢这周的感觉,前两道题对着 wp 简略复现了一下,由于以前都是自己学习,对一些稍微多、稍微难的题都会马上避开,笨小孩逃避太久了,有些事逃不掉,总得面对,开始往往很难,多花点时…...
14 Day:同步锁与操作系统输入输出
前言:在上一期的线程章节中,我们的线程输出貌似有大问题,今天我们便要来学习同步锁来解决这个问题,同时再次基础上拿下键盘输入,实现操作系统的输入和输出。从今天开始我们的操作系统不在是一块“看板”了!…...
Gradle 的下载安装教程
Gradle 8.0.1 下载安装教程笔者的环境: Java 17.0.1 Gradle 8.0.1 Windows 10 教育版 64位 在继续阅读本教程之前,需要先完成 JDK 的安装。JDK 需要选择 8 及以上的版本。关于 JDK 的安装,可见笔者的另一篇博客: Java 的下载安…...
「Python 基础」常用模块
文章目录1. 内建模块datetimecollectionsnamedtuple()dequedefaultdictOrderedDictChainMapCounterbase64structhashlib摘要算法摘要的应用hmacitertoolscontextlib\_\_enter\_\_ 和 \_\_exit\_\_contextmanagerclosingurllibGETPOSTHandlerXMLDOMSAXHTMLParser2. 第三方模块Pi…...
Java【二叉搜索树和哈希表】详细图解 / 模拟实现 + 【Map和Set】常用方法介绍
文章目录前言一、二叉搜索树1、什么是二叉搜索树2、模拟实现二叉搜索树2.1, 查找2.2, 插入2.3, 删除3、性能分析二、模型三、哈希表1、什么是哈希表1.1, 什么是哈希冲突1.2, 避免, 解决哈希冲突1.2.1, 避免: 调节负载因子1.2.2, 解决1: 闭散列(了解)1.2.3, 解决2: 开散列/哈希桶…...
如何用 C 语言实现文本特征提取?
文本特征提取是一种将文本转换为数字或向量表示的技术,它是自然语言处理中的重要步骤。以下是一些用 C 语言实现文本特征提取的基本方法:基于词袋模型的特征提取词袋模型是一种将文本表示为单词频率的方法,可以通过以下步骤实现:将…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
