STM8、STM8S003F3P6 双机串口通信(片上串口)
背景
这里为什么要写串口通信,因为实际项目上使用了串口,STM8S003F3P6的串口简单啊,不值得一提。本文写的串口确实简单,因为这里我想先从简单的写起来,慢慢的把难的引出来。这里呢,做个提纲说明,本文设计的串口,是使用STM8S003F3P6片上的串口。由于STM8S003F3P6资源有限,双机通信资源时常不够,下篇文章提出用IO模拟串口的方式进行数据收发。
原理图
实际涉及原理图如下图所示,比较简单
就是采用STM8S003F3P6的PD5/PD6管脚进行串口收发


从STM8S003F3P6的对应手册中可以看出来
PD5/PD6对应的串口1
uart1,如下图所示

STM8S003F3P6串口的基本特性,这里看STM8S003F3P6支持的串口功能还是很多的
异步通信串口、LIN等模式
实际上本文使用的模式就是异步串口通信,这也是最常用的一种方式

软件设计
串口的初始化操作,这里比较简单就是配置串口,打开串口中断
对了,这里波特率选择9600,很多波特率都是用115200,这里着重提一下,STM8最好波特率都使用115200,波特率太高容易导致数据丢失。STM32调试倒是没有这个问题。
/************************************************
函数名称 : UART_Initializes
功 能 : UART初始化
参 数 : 无
返 回 值 : 无
作 者 :
*************************************************/
void UART_Initializes(void)
{UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);UART1_Cmd(ENABLE);//enableInterrupts();
}
主频配置,这里采用内部HSI,主频16M
/************************************************
函数名称 : CLK_Configuration
功 能 : 时钟配置
参 数 : 无
返 回 值 : 无
作 者 :
*************************************************/
void CLK_Configuration(void)
{
/*ErrorStatus clk_return_status;CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); //HSI = 16M (8分频)=2MHZ//切换内部低速时钟128khzclk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);if (clk_return_status == SUCCESS) //SUCCESS or ERROR{CLK_ClockSwitchCmd(ENABLE);CLK_LSICmd(ENABLE);CLK_ClockSwitchCmd(DISABLE); }*/// CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (1分频)//ErrorStatus clk_return_status;CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (8分频)=2MHZ/* //切换内部低速时钟8Mclk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);if (clk_return_status == SUCCESS) //SUCCESS or ERROR{CLK_ClockSwitchCmd(ENABLE);CLK_HSECmd(ENABLE);CLK_ClockSwitchCmd(DISABLE); }*/
}
串口接收中断函数
串口接收中断函数中,需要把接收到的串口字节读取走
如下代码,将数据放到缓存中
/*** @brief UART1 RX Interrupt routine.* @param None* @retval None*/uint8_t com_in = 0;
uint8_t com_out = 0;
uint8_t com_rv_buf[MAX_COM_RV_BUF];INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/ uint8_t tmp,index;tmp = UART1_ReceiveData8();index = (com_in + 1) & (MAX_COM_RV_BUF - 1);if (index != com_out){ com_rv_buf[com_in] = tmp;com_in++;com_in &= (MAX_COM_RV_BUF - 1);}}
串口发送函数,先实现发送一个字节,然后实现发送多个字节的函数
/************************************************
函数名称 : UART1_Printf
功 能 : 串口1打印输出
参 数 : String --- 字符串
返 回 值 : 无
作 者 :
*************************************************/
void UART1_Printf(uint8_t *String)
{RE485_TX;while((*String) != '\0'){UART1_SendByte(*String);String++;}RE485_RX;
}
/************************************************
函数名称 : UART1_SendByte
功 能 : UART1发送一个字符
参 数 : Data --- 数据
返 回 值 : 无
作 者 :
*************************************************/
void UART1_SendByte(uint8_t Data)
{while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));UART1_SendData8(Data);while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET));
}
总结:本文设计的串口,是使用STM8S003F3P6片上的串口。由于STM8S003F3P6资源有限,双机通信资源时常不够,下篇文章提出用IO模拟串口的方式进行数据收发。
相关文章:
STM8、STM8S003F3P6 双机串口通信(片上串口)
背景 这里为什么要写串口通信,因为实际项目上使用了串口,STM8S003F3P6的串口简单啊,不值得一提。本文写的串口确实简单,因为这里我想先从简单的写起来,慢慢的把难的引出来。这里呢,做个提纲说明࿰…...
FPGA基于AXI 1G/2.5G Ethernet Subsystem实现千兆UDP通信 提供工程源码和技术支持
目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统UDP网络通信方案本方案详细设计说明UDP层设计AXIS-FIFOAXI 1G/2.5G Ethernet Subsystem:输出 4、vivado工程详解5、上板调试验证并演示系统配置UDP数据回环测试注意事项 6、福利:工程代码的获取 1…...
机器学习基础知识之多模型性能对比评价方法
文章目录 1、交叉验证t检验2、Friedman检验与Nemenyi后续检验 在进行预测或分类对比实验时,通常需要比较两个或两个以上的模型性能,因此,下面将介绍两个常用的多模型性能对比评价方法,一种是交叉验证t检验,该方法主要用…...
对敏感信息脱敏,如对姓名、证件号码、手机号码、银行卡号码进行脱敏
一、姓名脱敏 1、脱敏规则一:显示姓名中的第一个字,其它用*号代替。 显示姓名中的第一个字,如为英文等其他语种,也是显示第一个字母。其它用*号代替。 ① 举例 张* 王** A**** ② 实现方法 hideName(name) {if (!n…...
创建型——单例模式C++实现
单例模式即保证一个类只有一个实例,并提供一个访问该单例的接口。 实例 1.懒汉式 用的时候才创建单例,“懒”。 Singleton.h #ifndef SINGLETON_H_ #define SINGLETON_H_#include <iostream> #include <string> #include <mutex>…...
【华为OD统一考试B卷 | 100分】执行时长(C++ Java JavaScript Python)
文章目录 题目描述输入描述输出描述ACM输入输出模式用例机考代码查重C++javascriptjavapython题目描述 为了充分发挥GPU[算力],需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务,…...
操作系统原理 —— 内存管理的概念(十八)
为什么要有内存管理 为什么要对内存进行管理,需要解决什么问题? 要回答这个问题,首先我们需要明白:进程运行时,需放在内存才能运行。比如在执行一个程序时,需将该程序的相关数据与指令装入内存才能运行。…...
GPT-4国内怎么用
GPT-4是OpenAI推出的最新的生成式AI模型,作为ChatGPT的进化版,它在回答准确性、识图能力、生成歌词和创意文本等方面有了显著的提升。然而,由于网络限制,国内用户无法直接访问官方网站。那么,GPT-4在国内如何使用呢&am…...
搭建LightPicture开源免费图床系统「公网远程控制」
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 转载自cpolar极点云的文章:【搭建私人图床】使用LightPicture开源…...
shell编程lesson06
流控制 while 和 until 循环 #!/bin/bash# while-count:display a series of numbersi1 while [ $i -le 5 ];doecho $ii$((i1)) done echo "Finished!"while命令的语法结构如下: while commands;do commands;done 我们可以使用while循环改进上一节中的…...
国内免费可用的ChatGPT网页版
ChatGPT 一、ChatGPT是个啥?二、16个国内免费的ChatGPT网站。三、ChatGPT使用方式 一、ChatGPT是个啥? chat:表示“聊天”。 GPT:则是Generative、Pre-trained、Transformer的缩写,表示“预训练语言模型”࿰…...
用同样的关键词测试不同的人工智能
测试词汇:用“电商、接口、店群”写一篇关于API接口的推广软文 返回结果: 人工智能1: 电商行业已经进入了全面数字化转型的时代,而API接口技术正是数字化转型的重要组成部分。随着移动端、小程序等终端越来越普及,A…...
shell变量类型含义 长方形面积计算 截取相应字段方法
1.总结变量的类型及含义? 2.实现课堂案例计算长方形面积?(6种方式) 3.定义变量urlhttps://blog.csdn.net/weixin_45029822/article/details/103568815(通过多种方法实现) 1)截取网站访问的协议 …...
Java:从单线程计数器到多线程数据同步synchronized和原子类Atomic
目录 使用单线程使用多线程使用多线程 synchronized使用多线程 原子类AtomicLong 使用单线程 单线程修改计数器的值,没有发生问题,每次运行结果都是10000,不过程序耗时较长 package com.example;/*** 计数器*/ class Counter {private st…...
提前进入行业顶尖阵营:高性能计算实习的竞争优势
如今就业越来越内卷,尤其是计算机行业更是如此。加上GPT以及大模型的加持,各大企业纷纷降本增效,普通程序员逐渐失去竞争力。想要在竞争激烈的就业市场中脱颖而出,提前进入行业顶尖阵营是一个明智的选择。而高性能计算实习将为您提…...
Java程序设计入门教程--标识符和关键字
目录 标识符 标识符的约定 标识符 1. 定义 用来标识类名,变量名,方法名,类型名,数组名,文件名的有效序列称为标识符。简单地说,标识符就是一个名字。 2. 标识符命名规则 (1)大小…...
国产IC芯片自动化测试系统ATECLOUD,助力芯片测试自动化
IC芯片测试成本是影响制造和加工成本的重要因素。在某些情况下,测试成本可能占到器件总成本的40%左右。为了降低测试成本,可以优化测试程序并研发多工位测试。同时,必须平衡良品率和测试时间,以实现最佳的成本控制。本篇文章纳米软…...
BeanFactory和ApplicationContext有什么区别?
BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext有什么区别? BeanFactory (轻量级) 和ApplicationContext(高级特性和框架)是Spring的两大核心接口,都…...
js的BOM对象中的window、location使用
说明:BOM的全称是Browser Object Model,浏览器对象模型,有Window(浏览器窗口)、Navigator(浏览器)、Screen(屏幕)、History(历史记录)和Location&…...
DAY 68 redis高可用的主从复制、哨兵、cluster集群
Redis 高可用 什么是高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服…...
CentOS 7系统下PyTorch 2.8深度学习镜像的部署与性能调优指南
CentOS 7系统下PyTorch 2.8深度学习镜像的部署与性能调优指南 1. 引言 在深度学习领域,PyTorch已经成为最受欢迎的框架之一。对于需要在企业级CentOS 7生产环境中部署PyTorch 2.8的开发者来说,一个优化良好的环境可以显著提升模型训练和推理的效率。本…...
SQL分组Group By
一、先搞懂:分组查询是干嘛的?分组查询 GROUP BY 就是把表中数据按照某个字段「分类」,然后对每一类做统计。比如你 emp 表有 gender(性别)字段,用分组就能:统计「男员工有多少人、女员工有多少…...
避坑指南:在OpenHarmony ESP32上驱动INMP441麦克风时,I2S库编译报错的排查与解决
深度解析:OpenHarmony ESP32驱动INMP441麦克风的I2S编译问题全攻略 当你在OpenHarmony环境下为ESP32开发板移植INMP441数字麦克风驱动时,是否遇到过I2S库编译报错的困扰?这个问题看似简单,实则涉及编译系统、依赖管理和硬件抽象层…...
【2026 CVPR】Asking like Socrates: Socrates helps VLMs understand remote sensing images
RS-EoT (Remote Sensing Evidence-of-Thought) 研究旨在解决视觉语言模型(VLM)在处理遥感图像时的“虚假推理”问题 。 文章目录 核心问题 核心思想 核心方法 A. 数据合成:SocraticAgent Data Statistics B. 训练策略:两阶段渐进式强化学习 (RL) C. 训练策略 实验验证 主要…...
2025届必备的六大降重复率助手横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 纵然人工智能辅助毕业论文写作现如今已然成为一种学术方面的新常态,可是却需要去…...
深入Helmholtz原理与NFA:EDLines如何像“质检员”一样控制误检率
Helmholtz原理与NFA:EDLines如何用数学语言定义"有意义"的线段 在计算机视觉领域,直线检测看似是个基础问题,却蕴含着深刻的数学智慧。当我们观察EDLines算法时,会发现它不仅仅是一系列操作步骤的堆砌,更是一…...
一台服务器最多能建立多少 TCP 连接:从理论极限到实际瓶颈
一台服务器最多能建立多少 TCP 连接:从理论极限到实际瓶颈01. 前言:一个经典却容易被答错的问题02. 核心原理:什么唯一标识一个 TCP 连接?03. 服务端 vs 客户端:限制完全不同3.1 服务端视角(如 Nginx、Tomc…...
前端CSS精讲05:Grid网格布局——现代页面最强二维布局方案
文章目录 一、什么是 Grid 布局 二、开启 Grid 三、最核心:划分行和列 1. 定义列数与宽度 2. 定义行数与高度 3. 自适应等分:fr 单位(Grid 神器) 4. 自动适应内容 四、格子之间的间距 五、对齐方式(和 Flex 很像) 1. 整个网格在容器里的位置 2. 整个网格整体对齐 六、子项…...
HJ164 太阳系DISCO
题目题解(7)讨论(12)排行 中等 通过率:33.93% 时间限制:1秒 空间限制:256M 知识点广度优先搜索(BFS) 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 …...
多LLM查询扩展框架实战指南(非常详细),RAG优化新范式从入门到精通,收藏这一篇就够了!
🎯 一句话总结:本文提出一套完全自动化的领域自适应查询扩展框架,无需人工编写Prompt或选择示例,通过BM25-MonoT5 pipeline构建领域内示例池,再用LLM精化多LLM扩展结果,显著提升检索性能。 📖 为…...
