对于串口而言,最基本的就是 收发。
因为本例程系列及我个人的风格,我总是只让例程的功能——同时也就纯粹到 只展示这个功能的最小配置和最少代码。
而对我而言,串口 收发(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寄存器的函数,或者想办法把外部晶振频率传递入库,让它可以获得真正的 实际频率。
上一篇:用IAR测试STM8的PWM
下一篇:IAR下STM8S207单片机各模块的无库例程
推荐阅读最新更新时间:2024-11-17 12:03
设计资源 培训 开发板 精华推荐
- 5V接近开关
- USB 电源
- 基于IP5305的0静态耗电1.2A移动电源3LED验证板
- PAM2305 1A可调输出电压降压DC-DC转换器的典型应用
- 课设图5
- MAXREFDES220#:智能指尖式心率计及脉搏血氧仪,具备信号处理功能
- 带SPI的IFX9201SG 6A H桥电机控制器的典型应用
- KIT34712EPEVBE: Evaluation Kit - 34712, DDR Switch-Mode Power Supply
- LTC2945HMS-1 在 -48V 恶劣环境中进行电源监控的典型应用,使用 INTVCC 并联稳压器来承受 200V 瞬态
- 基于STSPIN233,适用于STM32 Nucleo的低压低频无刷直流电机驱动器扩展板
- 睿瀚医疗万斌:“脑机接口+AI+机器人”是康复赛道的未来
- 希润医疗孟铭强:手功能软体机器人,让脑卒中患者重获新生
- 柔灵科技陈涵:将小型、柔性的脑机接口睡眠设备,做到千家万户
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度