【stm8s003系列例程】2 基本串口收发(中断接收方式)

发布者:LovingLife2023最新更新时间: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寄存器的函数,或者想办法把外部晶振频率传递入库,让它可以获得真正的 实际频率。


关键字:串口收发 引用地址:【stm8s003系列例程】2 基本串口收发(中断接收方式)

上一篇:用IAR测试STM8的PWM
下一篇:IAR下STM8S207单片机各模块的无库例程

推荐阅读最新更新时间:2024-11-17 12:03

AT91SAM3S串口UART初始化及收发数据
SAM3S中的UART串口是一个两线异步收发器。这个串口能用来通信或者跟踪。有两个DMA通道与UART串口关联,可通过使用DMA处理串口传输以节省CPU时间。 SAM3S4C中有两个UART。与外设引脚的对应关系如下: 板子上使用的是UART0,及PA9和PA10引脚。 SAM3S的UART结构框图 串口初始化,收发数据 的步骤如下: 1、配置相应IO口的引脚(设置IO时钟及引脚工作模式) 2、打开UART时钟 3、复位并停止UART 4、设置UART功能(奇偶校验UART_MR、波特率UART_BRGR、DMA UART_PTCR、收发使能UART_CR 等) 5、收发数据 UART_THR U
[单片机]
AT91SAM3S<font color='red'>串口</font>UART初始化及<font color='red'>收发</font>数据
STM8L USART+DMA配置,使用DMA完成串口收发
USART配置 /*----------------------------------------------------------------------------- * 函 数 名 : USART1_Config() * 函数功能 : USART1初始化配置 * 输 入 : 无 * 输 出 : 无 -----------------------------------------------------------------------------*/ void USART1_Config(void) { USART_Init(USART1, (uint32_t)
[单片机]
STM32 HAL库串口同时收发接收卡死?
为什么STM32 HAL库串口会出现同时收发导致接收卡死的问题?如何解决这个问题? 首先,我们来了解一下STM32 HAL库的串口通信机制。 STM32 HAL库是针对STM32系列单片机的一套常用的高级抽象层库。在HAL库中,串口通信是通过针对USART外设的封装实现的。HAL库中提供了一些函数,可以方便地配置USART外设的各种参数,如波特率、数据位、停止位、奇偶校验等,还提供了发送和接收数据的函数。 串口通信是一种异步通信方式,发送和接收是独立的。在使用HAL库编写串口通信代码时,如果在发送数据的同时也接收数据,就可能会出现接收卡死的问题。这是由于串口通信中数据的传输需要遵循一定的协议,同时发送和接收可能会导致这种协议破坏,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved