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 语言实现文本特征提取的基本方法:基于词袋模型的特征提取词袋模型是一种将文本表示为单词频率的方法,可以通过以下步骤实现:将…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
