stm8s 串口通讯源码程序(8位数据,奇校验,2个停止位)

嵌入式Modbus调试实战:物理层、协议层与工具链避坑指南 Modbus是一种广泛应用于工业控制和嵌入式系统的串行通信协议,其核心优势在于低开销、低硬件依赖和高部署密度。理解其三层结构——物理层(如RS-485总线匹配与共模干扰)、协议层(如CRC-16字节序、3.5字符超时机制)——是解决通信异常的关键。在工程实践中,90%的‘Timeout’或‘Illegal Address’问题并非协议错误,而是物理连接不稳、寄存器映射偏差或工具使用错位所致。尤其需警惕串口助手无法替代Modbus专用工具(如Modbus Poll、逻辑分析仪)这一常见误区。本文聚焦真实调试场 阅读详情

串口初始化第一步,配置波特率,波特率是和时钟相关的,因此首先要配置时钟,时钟的配置参见上一篇博客。stm8s主时钟设置

如果在串口初始化中,如果串口时钟没有打开,请在主时钟配置中打开串口时钟。

配置波特率,stm8s的波特率,时钟,波特率寄存器值的计算相比avr和51又是巨大的进步,stm8s算波特率寄存器值只要Fmaster/波特率就可以了,不需要加加减减。


但是在写入寄存器时需要注意。

一,先写BBR2,再写BBR1。

二,BBR2写的是高四位和低四位,BBR1是中间八位,例如,Fmaster = 8 mhz,波特率1200,求得BBR寄存器值为8000000/1200  =  0x1A0A,那么写入寄存器的值就是BBR2=1A,BBR1=A0,顺序和数字都不能错。

 


波特率搞定了,下面就是串口数据帧的配置,串口数据的具体协议,这里不再多加描述。

需要注意的是,stm8s的数据位数计算和avr/51的有所区别。


看图。假设一个帧定义的是1个开始位---8位数据---1校验位---n停止位。在avr设置中,寄存器配置算他是8位数据配置,51太久不记得了应该也是算8位,但是在stm中,寄存器配置是9位数据(8位数据加1位校验位),需要对寄存器UART_CR1中的M位写1。

这里可知,stm8s的校验位也算数据位!!!stm只支持8位数据加一位校验位或者9位数据不加校验的形式,不支持9为数据加1位校验位的格式。当然这点只是推测。

---------

串口初始化源码

void uart_init(void)
{
	UART1_CR2 = 0;				//关闭串口
	UART1_CR1 |= 0X17;			//9位,奇校验,校验中断开
	UART1_CR3 |= 0X20;			//两个停止位
	UART1_BRR2 = 0X1c;			//Fmaster / 1200 =1A0c
	UART1_BRR1 = 0Xa0;	
	UART1_CR2 |= 0X2C;			//打开串口
	
}

发送数据源码

void uart_transmit(unsigned char data)
{
  while((UART1_SR & 0x80) == 0x00);
      UART1_DR = data;

}

中断接收更新

其实很简单,不过stvd和iar的中断写法不太一样。这里就不详细说了。需要说的是两点。

第一是stvd的中断处理函数不能写在stm8s_interrupt_vector,c文件中,应该写在其他文件然后全局声明,在stm8s_interrupt_vector,c调用就可以了。如果写到stm8s_interrupt_vector,c中,那么有可能会有一些奇怪的段重合问题,这应该是编译器的限制,具体我会在另一篇文章中写出。同样的其他任何中断处理函数都不建议写到这个文件。只调用不定义。

第二是,不要忘记对UART_SR中的接收标志位清零。同样的在stm8的所有中断,都需要在最后清除标志位,包括但不限于串口,定时等。有个例外是外部中断不需要清除中断标志位(据说stm8l的同样需要,我当前没有该芯片不能实测)

基于 INA226 的高精度智能电子保险丝电源监视器完整设计与实现 本文设计了一种基于SC77010Q和INA226的高精度智能电子保险丝电源监视器,解决了传统保险丝响应慢、不可恢复、无监测能力的问题。该方案支持5~36V输入、10A持续电流,集成多重保护功能,电压测量精度优于±0.1%,电流测量精度满足全量程指标要求。系统采用车规级SC77010Q实现I²t熔丝特性和硬短路保护,配合INA226高精度计量芯片进行精准测量,并通过STM32F103C8T6主控实现数据显示、参数设置和通讯功能。文章详细介绍了硬件设计、PCB布局、嵌入式软件开发和系统校准方法. 阅读详情

相关推荐

STM8S003串口最小代码例程

STM8S003和STM8S103单片机的串口最小例程,可以实现串口的发送接收,接收的手机通过串口发回去

串口中断接收数据方式

      单片机中断能够及时响应外部触发事件,在中断函数中处理外部事件,处理完成之后退回到中断点。中断服务函数应该能最快速的解决触发事件,快速退出中断,不宜在中断中处理复杂的运行算法。所以中断函数的编写尽量简单明了快速,下面以串口接收中断为例来说明中断处理函数的写法。       1.设置一个全局标志,触发中断之后在中断函数内把该标志设置为1,清除中断标志位,然后退出中断。在主函数内判断该标志...

qq_37182134的博客 1万+

STM8S003单片机串口通信奇偶校验示例

在STM8S003单片机最小系统上做一个简单的串口通信示例,用来测试串口设置为无校验位,奇校验位或者偶校验位通信是否正常。

【STM32笔记】串口空闲中断接收不定长数据(DMA方式)也可以同时利用串口中断接收数据和利用空闲中断判断一帧结束,不矛盾,比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断

【STM32笔记】串口空闲中断接收不定长数据(DMA方式) ZhengN 18 人赞同了该文章 在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。 一、IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。..

二进制模----细微行动改变影响世界 1800

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

docker安装的 n8n提示Your n8n server is configured to use a secure cookie, however you are either visiting

将原来的docker n8n进行删除后即可通过一下方式重新安装,如安装完n8n,提示。

满地找牙的博客 3366

串口通信原理(1)

串行通信是将数据字节分成一位一位的形式在一条数据线上传送,8位依次传送 一异步通信与同步通信 *每一个字符内的各位是以相同时间间隔发送的 2.同步通信 :同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离为为间隔的整数倍。 同步的两种实现方法 3.串行通信的传输方式 1.单工;一个方向 2.半双工;两个方向单是要分时进行 3.双工;同时进行 4. 传输速率 比特率是每秒钟传输二进制代码的位数,单位是bps。 ...

amimax的博客 838

SAP软件外币评估系统配置与操作

文章摘要:本文详细介绍了SAP系统中外币评估的流程、策略及系统操作。外币评估是期末关账的重要环节,主要针对外币未清项目及资产/负债进行汇率重估,生成评估差异过账以反映真实财务状况。文中阐述了三种评估策略(不评估、增量评估、期末评估冲回)及适用场景,并提供了SAP系统外币评估的具体操作步骤(FAGL_FCV/FAGL_FC_VAL事务码)。同时,讲解了货币资金科目和未清项管理科目的评估差异处理方式,以及相关的系统配置(OB59、OBA1等)。文章还区分了已实现和未实现汇兑损益的会计处理,为企业外币业务管理提供

weixin_40672823的博客 1959

单片机中串口如何发送超过8位的数据

原文中有点小错误,做了小更改。 在做下位机通信时往往会用到串口,包括下位机将数据传输给上位机,或者是下位机与下位机之间进行数据传输,这时候就会遇到发送数据的问题,单片机通过串口发送数据时往往是一次一个字节(8位),如果传输char(8位)型数据则很好办,只需要直接发送就可以了,但是在发送int型数据和float型数据时就会稍微有些复杂。     下面就以常用的8位单片机89c51为例来

CSU_Freefancy 1万+

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)_资料编号34

实现一主多从的LORA组网远程通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数据并通过各自的 LoRa组网将数据发送给主机。

嵌入式阿齐Archie 1万+

DPABISurf使用教材

严老师的官方教程:http://rfmri.org/Course DPABISurf版本:dpabi50docker.tar.gz MATLAB版本:2018b 一、数据准备 (1)如果是数据的DICOM格式,整理成以下格式(注意文件夹的命名方式): 如果觉得不是很清楚,可以在官网下载Demo数据(http://rfmri.org/DemoData),参照里面的文件格式进行整理即可。 (2)如果数据是nii格式,整理成以下格式: 这里没有使用官网的demo数据进行学习,而是..

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 8519

STM8S系列基于IAR开发串口中断接收和发送示例

STM8S系列基于IAR开发串口中断接收和发送示例

perseverance51博客 1839

【CANoe示例分析】0002_SOMEIPDemo

该工程由Vector官方提供,作为仿真SOME/IP节点的示例。Demo中介绍了两种仿真SOME/IP节点的方法,一种是基于arxml数据库的仿真,另一种是没有数据库(arxml、fibex)的仿真。无论是哪种形式的仿真,如果想要通过CAPL程序接收或者发送SOME/IP信息,都需要添加交互层的信息,这些信息可以通过添加DLL文件实现,DLL文件路径在CANoe安装目录下的Exec32文件中。

jasonj333 3517

ESP-IDF UART串口通信实践:从环境搭建到硬件排错完整指南

在嵌入式开发中,UART串口通信是最基础也最常用的通讯方式,其异步时序和电平标准决定了设备间数据交换的可靠性。理解波特率、帧格式、TTL与RS232/RS485等物理层差异,是解决乱码、丢数据等问题的前提。ESP-IDF作为Espressif官方框架,其v5.x版本对UART驱动进行了组件化拆分,掌握正确的依赖声明与初始化流程,能显著提升开发效率。从Ubuntu环境配置、协议原理、事件驱动编程,到3.3V/1.8V电平转换、RS485总线接入,再到基于回环测试和逻辑分析仪的排错方法,本文以ESP32为例,系

weixin_30357231的博客 362

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 145

单片机:实现MPU6050的卡尔曼滤波算法(附完整源码)

单片机:实现MPU6050的卡尔曼滤波算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 798

基于Modbus-RTU通信协议实现RS485设备之间的通信(源码可直接移植)

两万字详解,基于STM32通过MODBUS-RTU通信协议实现RS485通信,内含源码可直接移植使用,内含详细的验证过程

时光の尘的博客 6045

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

51单片机

需要先安装Keil软件,该软件提供开发环境,在这里可以编写代码,且Keil还提供了一个叫Keil C51 Compiler的编译器,将代码编译为一个hex文件。然后需要将编译好的代码烧录进单片机,每家单片机厂商往往会提供他们自己的程序烧录工具,本课程用的单片机为STC公司制造,其提供了STC-ISP烧录工具。

qq_46433748的博客 71

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【看这一篇就够了】近三年嵌入式软件开发技术栈汇总

本文总结了嵌入式软件开发的核心技术栈,涵盖9个方面:开发基础、MCU开发、外设开发、毫米波雷达开发、传感器、外部芯片开发、RTOS、Linux、Qt和LVGL、通讯协议、物联网、DSP及FatFS文件系统。

Mike Zhou的博客 1399

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

嵌入式单片机之stm32串口你懂了多少!!

stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。 什么是串口 UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器 USART : Universal Sy...

jcyd_123的博客 1353

stm8s开发(三) UART的使用:串口通信!

串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具。 STM8S的通用异步收发器(UART)主要特性: ●  全双工的,异步通信 ●  可编程数据字长度(8位或9位)  ●  可配置的停止位-支持1或2个停止位 一般的,我们使用串

DevinTT的专栏 3万+

STM8S的串口通讯与空闲中断接收

最近做项目用到STM8S的单片机,STM8需要用IAR的STM8的软件版本来进行编译和下载。使用的是STlink的编仿真器,但是这个IAR的版本会存在一些问题,2、点击仿真,连接到芯片时可以正常下载,但如果没有连接到芯片也不会有报错,只是不会运行。3、如果之前有工程打开过,记得关闭所有的C和H的问题,不然可能编辑的是上一个文件。1、断点的添加,有时可以在运行时添加,有时却不能。接收中断函数,在stm8s_it.c文件中。

Dwyer的博客 1354

STM8S003单片机串口通信通信协议分析

最近在用STM8S003这个片子做项目,在做串口通信的时候,发现以前写的协议太简单了,项目中用不适合。 //协议 : 0XDD xx xx xx xx xx xx 0XAA @far @interrupt void UART1_Receive(void) { unsigned char res; res=UART1_DR; if(res==0xDD) //头 { Rec_...

HXYDJ的博客 4336

基于STM8的UART发送和中断接收---STM8-第二章

1. 综述   UART的基础知识,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。   做软件开发的人都知道打印信息的重要,说到打印信息,我们就不得不说UART串口打印。做单片机开发的人,打印信息主要的来源就是UART串口打印。因此,UART会比较常用到,所以在此对UART串口进行一个说明。 2. 关于STM8S103手册的UART简介 3. UART初始化参数详细讲解 3...

qq_40305944的博客 6736

STM8S003F串口发送接收

本次使用STM8S003F芯片,编译环境为IAR,至于新建工程什么的教程很多,这里就不多叙述了。

bing_xin_的博客 1155

IAR for stm8使用标准固件库的方法以及注意事项

标准库其实挺方便的。有了一个模板之后,如果改参数,根本就不需要再去查手册,重新定义寄存器值了。 第一部分,stm8标准库介绍。 stm8的标准库名称代码是stsw-stm8069,根据这个代码就可以到st的官网上下载到最新的固件库。 解压固件库后,有几个文件夹,我这里只是简单的说明各文件夹和文件的作用,具体的说明参考文件包中的chm帮助文档。 Libraries是驱动文件夹,里面的

零界 2万+
上一篇: STM8S 时钟配置源码程序
下一篇: IAR for stm8使用标准固件库的方法以及注意事项
ZeroSkyrim
博客等级 码龄16年 34粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值