历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | 关于STM8S的UART2串口的学习记录以及使用经验

2020-01-07 来源:eefocus

前言

这是本人第一次接触STM8S单片机,所以记录一下,方便日后查找。


正文

Uart2串口作为STM8S的标准串口之一,它的作用就是以有线连接的方式为STM8S单片机提供对外通讯的通道。


初始化

要想使用串口的第一步就是要完成对串口相关引脚的初始化以及串口本身的初始化。

具体代码如下:


GPIO_DeInit(GPIOD);

GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);

GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);   

UART2_DeInit();

UART2_Init(115200, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO,   UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);

UART2_Cmd(ENABLE);

UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE);

enableInterrupts();


以上代码我会逐句解释:

GPIO_DeInit() 用来将关于通用IO口的寄存器置为缺省值,即初始值

GPIO_Init() 用来设置通用IO口的模式,其中前两个参数用来指明具体是哪个通用IO口,第三个参数说明将该GPIO初始化为何种模式。关于模式的具体定义可以参考数据手册或者进入下面的链接:

链接:link

UART2_DeInit() 同样将串口的相关配置初始化为缺省值

UART2_Init() (这个初始化函数的参数列表真的是我见过的最长的。。。)

相关参数:

115200:波特率

UART2_WORDLENGTH_8D:字长8位

UART2_STOPBITS_1:停止位一位

UART2_PARITY_NO:奇偶校验

UART2_SYNCMODE_CLOCK_DISABLE:同步模式

UART2_MODE_TXRX_ENABLE:收发使能

UART2_Cmd(ENABLE):UART2使能

UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE):使能中断接收

enableInterrupts():使能全局中断


接收发送数据

当完成以上初始化后,就可以进入收发数据的环节了


数据发送

库函数提供了最基本的发送函数:

UART2_SendData8()


不过想直接应用到代码中,你极有可能可能会掉坑而且摔得不轻

以我惨痛的经历敬告大家:

如果不想自己的数据被发送的支离破碎,惨不忍睹的话,请将发送函数UART2_SendData8()包含到自定义发送函数中,例如:


void Send(uint8_t Data)

{

  while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET));

  UART2_SendData8(Data);

  while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));

}


while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET)):等待发送寄存器为空

UART2_FLAG_TXE是代表发送寄存器为空的标志

while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET)):等待传输完成

UART2_FLAG_TC是代表发送完成的标志


数据接收

这个也有基本函数UART2_ReceiveData8()

虽然这个不用顾及标志位的问题,但是这个要考虑中断的问题,上面提到的Uart2的中断使能以及全局开中断都是为了能及时顺利接收数据。

所以一般接收函数都要放到位于stm8s_it.c文件下:


INTERRPUT_HANDLER(UART2_RX_IRQHandler, 21)

{

/* In order to detect unexpected events during development,

       it is recommended to set a breakpoint on the following instruction.

    */

}


顺带提一句,所有的中断处理函数都在stm8s_it.c这个文件中,例如TIM,I2C,ADC等。

推荐阅读

史海拾趣

Devar Inc公司的发展小趣事

智能家居是电子行业的一个重要发展方向,Devar Inc公司也积极拓展这一领域。公司推出了一系列智能家居产品,如智能音箱、智能照明、智能安防等。这些产品不仅具备远程控制、语音控制等便捷功能,还通过Devar的AI技术实现了智能学习和智能联动。例如,智能音箱可以根据用户的习惯和喜好,为用户推荐音乐、新闻等内容;智能照明则可以根据环境光线和用户需求自动调节亮度和色温。

E-Switch公司的发展小趣事

随着公司的发展,E-Switch不断推出新产品,以满足不同客户的需求。从最初的轻触开关,到后来的防破坏按钮、摇杆开关、滑动开关等多种类型,E-Switch的产品线逐渐丰富起来。同时,公司也积极拓展市场,将产品销往全球各地,进一步提升了品牌影响力。

Floeth Electronic Ltd公司的发展小趣事

E-Switch公司始终坚持以客户为中心的经营理念,致力于为客户提供优质的服务和产品。公司建立了完善的客户服务体系,及时解决客户在使用过程中遇到的问题。同时,E-Switch还积极与客户保持沟通交流,了解市场需求变化,以便及时调整产品策略和生产计划。正是这种以客户至上的经营理念和持续发展的战略眼光,让E-Switch在电子行业中不断发展壮大。

Heraeus公司的发展小趣事

在电子行业中,技术创新是企业保持竞争力的关键。E-Switch公司深知这一点,因此不断投入研发力量,寻求技术突破。近年来,公司在开关产品的智能化、小型化、高可靠性等方面取得了显著成果,多项技术处于行业领先地位。这些技术突破不仅提升了产品的性能,也进一步巩固了E-Switch在电子行业中的领先地位。

Cambridge Electronic Industries Ltd公司的发展小趣事

面对日益严峻的环境问题和社会责任,CEI积极响应可持续发展的号召。公司加大了对环保技术的研发投入,推出了多款节能、环保的电子产品。同时,CEI还关注员工福利和社会公益事业,积极参与社会捐赠和公益活动。展望未来,CEI将继续坚持技术创新和可持续发展战略,为电子行业的繁荣和发展做出更大的贡献。

通过以上五个故事,我们可以看到Cambridge Electronic Industries Ltd公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和可持续发展等方面的努力,逐渐成为了电子行业的佼佼者。

台湾凌通(Generalplus)公司的发展小趣事
连接线路接触不良或松动也可能导致指示灯闪烁。可检查连接线路是否牢固,无松动或接触不良的情况。

问答坊 | AI 解惑

简易通用型PCI接口的VHDL-CPLD设计

摘要: 从PCI时序分析入手,重点阐述了PCI通用的状态机设计,说明了用VHDL语言来实现本PIC通信状态机的软件设计以及进行MaxPlusII验证的程序和方法。用该方法所设计的接口既可支持PCI常规传输,又可支持PCI猝发传输。 关键词: PCI时序 CPLD器件 ...…

查看全部问答>

Quartus2会取代maxplus2吗?

现在大多数人都在用Quartus2,有没有这种可能。…

查看全部问答>

LPCXpresso 平台工程创建

如下是本人编写的《LPCXpresso 平台工程创建》,可以带不熟悉LPCXpresso 平台的网友快速入门。当然本人也是初学,再加上E文不好,错误难免,望高手们多多指教。…

查看全部问答>

Wince shell替换问题

想用自己的程序作为shell wince启用时调用自己的程序 1、本来修改了注册表把explorer.exe换成自己的程序了,就是用注册表编辑器修改launch50=“myapp.exe” 在模拟器上是可以的,不知道真机上行不。请问这样做可行么 看有的帖子说wince的注册表 ...…

查看全部问答>

evc 2个对话框之间的问题

我在一个工程里面加入了2个对话框。在第一个对话框中点击F1显示第二个对话框。在第二个对话框点击退出的时候显示第一个对话框。然后在第一个对话框点击退出的时候可以关闭整个程序。 但是为什么从第二个对话框退出显示第一个个对话框再退出后中是 ...…

查看全部问答>

EVC不能与EMULATOR连接,是什么原因,我安装顺序是没有问题的啊

都不知道什么原因,搞了好就了,网上搜了好多资料去解决还是不行的啊,那位前辈帮解决一下,再次小弟谢过了...... 在安装evc4.0与sp4的时候弹出一个 说emulaotor驱动程序对当前系统造成不稳定,windows无法加载这些驱动程序........ 连接错误信息: on ...…

查看全部问答>

STM32I2C中断传输方式服务程序,欢迎抛砖。

#define _I2C_DEBUG_#ifdef _I2C_DEBUG_  u32 gAu32Tmp[100];#endif// I2C1中断服务程序.void I2C1_EV_IRQHandler(void){  u32 lu32Event;  static u8 lu8BusyCount&n ...…

查看全部问答>

蜂鸣器使用问题

请问单片机与蜂鸣器、直流电机的接口电路为什么要放大器驱动????…

查看全部问答>

坚决不用STM,转学Xmega A3U

坚决不用STM,转学Xmega A3U,8 bit就是好…

查看全部问答>