历史上的今天
返回首页

历史上的今天

今天是:2025年02月23日(星期日)

正在发生

2021年02月23日 | 【stm8s003系列例程】2 基本串口收发(中断接收方式)

2021-02-23 来源:eefocus

对于串口而言,最基本的就是 收发。

因为本例程系列及我个人的风格,我总是只让例程的功能——同时也就纯粹到 只展示这个功能的最小配置和最少代码。


而对我而言,串口 收发(1字节——因此也就不涉及另外 对 收发的缓冲处理 等 实质上 和 串口基本功能无关的 代码)。


当然大多数时候,我接收都是中断方式,而发送则无此必要——但是,我知道,在对速度有要求或者需要并行处理的场所,还需要 发送中断,但这个比较少用,因此不考虑。


下面是代码。

在贴以前,我讲一些对相关库,代码的改动。


首先,stm8s这个库,它的stm8s_uart1.c里,在计算波特率时,它需要获取当前时钟频率

它采用的是 CLK_GetClockFreq();

这个函数定义在stm8s_clk.h里

然而,在这里,它并没有包含这个头文件——我知道,它是想模仿C标准库,保证内部的十几个库之间不存在互相包含关系。

很可惜它犯了错误。


因为我做这个串口例程时始终错误,我走了不少弯路,最后想起来查对相关寄存器,发现这个波特率BRR1 BRR2从来就没正常过。

而对比我此前的105例程却是可以的。(因为我此前也改动过,而我却忘了,也没有记录下来。)


也许在某些编译器上可以允许这种错误,但是调用和返回不会出错,但是这种对具体环境的依赖绝对是 除了找死还是找死。


其次,采用 CLK_GetClockFreq() 这个函数获取系统时钟,也有不妥当之处。

因为这个函数依赖一个外部宏,那就是 HSE_VALUE;

因为事实上,STM8S内部没有真正可以用于采样获取时钟频率的硬件。

它只不过是通过 寄存器(对HSI LSI),以及这个 HSE_VALUE宏来确定频率。


我们都知道,如果我希望把这个库单独封装,那么,对外部晶振频率这种随时会变化的环境,采用宏写入库,那将是一个大麻烦。


因此这个地方是造成这个 库无法单独封装 的又一个障碍。


我暂时没想到太好的办法。

但显然,这个地方是一个隐患。


过后也许会考虑比较单纯的,采取单独增加填写 BRR1 BRR2寄存器的函数,或者想办法把外部晶振频率传递入库,让它可以获得真正的 实际频率。


推荐阅读

史海拾趣

Glorious Sources Co Ltd公司的发展小趣事
使用万用表等工具检测放大电路和滤波电路各元件的电压、电流等参数是否正常。
Accuride公司的发展小趣事

Accuride公司在市场拓展方面也取得了显著成果。其产品不仅供应给北美地区的商用车制造商,还远销至其他国家。同时,Accuride与多家知名汽车品牌建立了紧密的合作关系,如Freightliner、Peterbilt、International、Great Dane和Mack等,为其提供高品质的零部件。这些合作伙伴关系的建立,不仅提升了Accuride的市场地位,也为其带来了稳定的订单和收入来源。

Cree(科瑞)公司的发展小趣事

Cree公司成立于1987年,初期专注于硅碳(SiC)材料的研发。在LED灯珠的制造工艺中,Cree的工程师们发现采用SiC材料制成的MOS功率管具备更好的市场价值。随着技术的不断进步,Cree开始将其应用于LED生产,这一创新使得Cree在LED行业中脱颖而出。公司的LED产品以其高效、耐用的特性受到市场的广泛认可,为Cree的后续发展奠定了坚实的基础。

CINCH公司的发展小趣事

CINCH公司深知人才是企业发展的核心竞争力。因此,公司高度重视人才培养和团队建设。公司设立了完善的培训体系,为员工提供了广阔的晋升空间和发展机会。同时,公司还积极引进优秀人才,打造了一支高素质、专业化的团队。这支团队在公司的各项业务发展中发挥了重要作用,为公司的长远发展奠定了坚实基础。

AEMC Instruments公司的发展小趣事

除了提供优质的产品外,AEMC Instruments公司还注重服务升级和客户关怀。公司建立了完善的客户服务体系,提供售前咨询、售后技术支持等全方位服务。同时,公司还定期举办技术培训和交流活动,帮助客户更好地使用和维护产品。这些举措不仅提高了客户的满意度和忠诚度,也促进了公司与客户的长期合作关系。

以上五个故事是基于AEMC Instruments公司的发展情况所做出的概括性描述,旨在展示公司在电子行业中的成长历程和取得的成就。当然,具体的发展故事还需要根据公司的实际情况和历史记录来深入挖掘和呈现。

CNC Tech公司的发展小趣事

CNC Tech公司深知,在竞争激烈的电子行业中,品质是赢得客户信任和市场口碑的关键。因此,公司始终坚持品质至上的原则,从原材料采购到生产制造的每一个环节都严格把控品质。CNC Tech还建立了完善的品质管理体系,通过严格的质量检测和持续的技术改进,确保每一台出厂的设备都能达到客户的期望和要求。正是凭借这种对品质的执着追求,CNC Tech赢得了广大客户的信赖和好评。

问答坊 | AI 解惑

语音电压表

我在设计一个简易的语音提示的电压表,每隔一定时间(比如5秒)提示一次所测量的电压值,用C语言编写程序   语音模块采用的是ISD4000系列的语音芯片 ,哪位朋友有设计方案或者是这方面的资料请提供一下,非常感谢!!   或者 ...…

查看全部问答>

请教基于arm9的操作系统有哪些啊?

请教:基于arm9的操作系统有哪些?它们各自有什么优缺点哪?都是用什么语言编程的啊?我刚接触这些也不知道该怎样问才专业些,另外请教一下想从零基础学arm9不知大家推荐什么书啊?多谢了!…

查看全部问答>

关于WIS go7007sb SDK 的编译问题

在wdk3790下没遇到问题 在wdk6000下出现十个问题 >errors in directory d:\\lr553\\drv\\board\\wisboard\\windows 1>d:\\lr553\\drv\\board\\wisboard\\windows\\bufferoverflowu.lib(gs_dllmain.obj) : error LNK2019: unresolved external sy ...…

查看全部问答>

求助各位大佬,如何往window打印机里发送cmyk数据?有没有方法?

如何往window打印机里直接发送cmyk数据,而不是转成RGB数据后再发送?有没有方法?麻烦个位大哥大姐帮帮忙,万分火急....…

查看全部问答>

基于乘积项的PLD设计和基于查找表的PLD设计有什么不同啊

基于乘积项的PLD设计和基于查找表的PLD设计有什么不同啊…

查看全部问答>

单片机 飞机游戏样例 和 手机输入法样例

单片机飞机游戏样例和手机输入法样例…

查看全部问答>

LaunchPad尝试:驱动1602液晶(现象是有了,但是有很多问题啊!!!)

       今天尝试着用LaunchPad驱动1602液晶,为了保险和熟练起见,先在51上写了程序并且运行成功,然后就转战LaunchPad。一条语句一条语句按着已经调试成功的51程序思路往下写,期间也借鉴了网友常见泽1所发帖子的一 ...…

查看全部问答>

TI单节电量计基本介绍及常见问题解答

电量计(gas gauge /fuel gauge)是用来计量显示电池电量,通常包括mAh剩余容量(RM),满充容量(FCC),百分比容量(SOC),电压,电流,温度等,部分电量计还包含放空,充满时间。TI阻抗跟踪电量计还有2个重要参数,Qmax(最大化学容量,指以非 ...…

查看全部问答>

MSP432P401R LaunchPad 晒单 物美价廉的M4 MCU

https://store.ti.com/Members/MyO ... 2495&OrderId=640406…

查看全部问答>