当前位置:首页 > 单片机 > 单片机
[导读]串口通讯具有悠久历史的,最基本、最简单的通讯方式,即使在当前这个注重移动和无线互联的时代,也少不了串口通讯的身影。比如对小数据量数据的无线传输,虽然物理链路用蓝牙或WIFI传输,但最后到单片机数据交互上,

串口通讯具有悠久历史的,最基本、最简单的通讯方式,即使在当前这个注重移动和无线互联的时代,也少不了串口通讯的身影。比如对小数据量数据的无线传输,虽然物理链路用蓝牙或WIFI传输,但最后到单片机数据交互上,可能还是用了串口通讯。

STM8S系列单片机有1~3个通用异步收发器(UART)支来持串口通讯,在这个部分里,将以STM8S单片机通过蓝牙与智能手机通讯,实现一个echo功能(单片机将收到来自于手机的数据原样返回给手机),来讲解如何使用单片机的串口功能。



1、电路设计

电路采用一款蓝牙转串口的模块实现蓝牙通讯,这款蓝牙模块有四个引脚,VCC、GND、TXD、RXD,只要将模块的VCC、GND引脚与电源连接,TXD、RXD引脚与单片机的RXD(即PD6)、TXD(即PD5)引脚相连就可以了。注意TXD和RXD一定要交叉相连,即蓝牙模块的TXD接单片机的RXD,蓝牙模块的RXD接单片机的TXD。

电路图如下,M1是蓝牙模块,电路原理很简单,就不多解释了:



2、软件设计

蓝牙模块里面已经实现了蓝牙的连接、认证等操作,并把蓝牙协议之上的应用数据转换为串口协议,在单片机软件上,只需要实现串口上数据读写。

即要实现的功能就是接受串口数据,并把收到的数据再用串口发送出去。

1)串口设置

STM8S标准库函数中提供了三个设置相关的函数:UART1_DeInit(),UART1_Init(),UART1_ITConfig()。第一个UART1_DeInit()是重置UART1,没有输入参数。重点是第二个UART1_DeInit()设置串口工作状态。先来看看函数接口定义:

void UART1_Init(uint32_t BaudRate, UART1_WordLength_TypeDef WordLength,
UART1_StopBits_TypeDef StopBits, UART1_Parity_TypeDef Parity,
UART1_SyncMode_TypeDef SyncMode, UART1_Mode_TypeDef Mode)

每个参数的作用如下:

BaudRate: 波特率

WordLength : 字节长度,取值为UART1_WORDLENGTH_8D或UART1_WORDLENGTH_9D

StopBits: 停止位,支持1个/0.5个/2个/1.5个停止位,取值为UART1_STOPBITS_1/UART1_STOPBITS_0_5/UART1_STOPBITS_2/UART1_STOPBITS_1_5。

Parity:奇偶校验位,UART1_PARITY_NO/UART1_PARITY_EVEN/UART1_PARITY_ODD

SyncMode:单片机UART_CK输出同步时钟的设置,不用UART_CK输出选择UART1_SYNCMODE_CLOCK_DISABLE即可。

Mode: 串口通信模式,UART1_MODE_RX_ENABLE/UART1_MODE_TX_ENABLE/UART1_MODE_TX_DISABLE/UART1_MODE_RX_DISABLE/UART1_MODE_TXRX_ENABLE

这里采用的蓝牙模块,与单片机的串口通讯默认是波特率9600,1个停止位,无奇偶校验位,不需要同步时钟,而要实现的echo功能要用到串口发送和接收,所以这里的具体参数应该是:

UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);

第三个函数UART1_ITConfig()是设置串口通讯的中断程序:

void UART1_ITConfig(UART1_IT_TypeDef UART1_IT, FunctionalState NewState)

UART1_IT:指定中断类型,串口的中断种类较多,重点使用的是UART1_IT_RXNE_OR:即接收完数据的中断。

NewState:表示要指定的中断是启用还是关闭。

这里只需要设置启用接收数据的中断即可,所以这里的具体参数应该是:

UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

注意在设置中断模式后,还需要启用中断,使用enableInterrupts()函数启用。

2)数据收发

数据发送比较简单,使用下面连个函数直接发送即可。

void UART1_SendData8(uint8_t Data);
void UART1_SendData9(uint16_t Data);

数据接收复杂一点,需要设置串口中断处理函数,发生串口接收中断后,再调用下面两个函数获取串口收到的数据。

uint8_t UART1_ReceiveData8(void);
uint16_t UART1_ReceiveData9(void);

串口接收中断向量是UART1_RX_IRQHandler中断中,所以要在stm8s_it.c的下面位置插入中断处理的代码:

INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
/ * In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
* /

//在这里插入接收数据的处理,用比如用UART1_ReceiveData8()读出串口接收到的数据
}

3)源代码

整个echo功能,软件要实现的是a)主函数main()中对串口进行设置,然后进入空循环,b)串口接收中断处理函数中读取串口的数据,并从串口重复发送回去。完整的源代码如下:

main.c

void main(void)
{

UART1_DeInit();
UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);//UART1_MODE_TX_ENABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
while (1);
}

stm8s_it.c

INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{

UART1_SendData8(UART1_ReceiveData8());
}

3、连接智能手机进行串口数据收发测试

将上面程序编译,下载到STM8S单片机上,先用智能手机与蓝牙模块配对,然后用蓝牙串口调试的APP(这类工具APP比较多,这里用的是叫“蓝牙串口”的APP)与已经配对的蓝牙模块连接上,最后发送数据(发送"test string"),可以看到单片机已经收到了数据,并原样发送回来了。



4、总结

本篇主要讲解了STM8S单片机串口的设置和数据的收发处理,共涉及以下知识点:

1)串口工作模式的设置

2)串口中断的设置和中断处理函数的编写

3)串口数据发送和接收。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

2025年6月5日,中国——意法半导体宣布Wi-Fi 6和低功耗蓝牙 5.4二合一模块ST67W611M1正式进入量产阶段,与此同时,重要客户Siana采用该模块的设计项目已取得初步成功,大大缩短了无线连接解决方案的研发...

关键字: Wi-Fi 蓝牙模块

在科技飞速发展的当下,智能城市已从概念逐步走向现实,成为提升城市生活质量、优化资源利用、增强城市竞争力的重要发展方向。智能城市的核心在于实现万物互联,让城市中的各种设备、系统和服务能够相互通信、协同工作,而蓝牙模块作为一...

关键字: 智能城市 无线通信 蓝牙模块

【2024年3月21日,德国慕尼黑讯】英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)近日宣布推出最新款蓝牙模块CYW20822-P4TAI040,在低功耗与覆盖范围等方面实现了新的突破,推动物联...

关键字: 蓝牙模块 智能家居 传感器

蓝牙通信是一种基于短距离无线技术的通信方式,可以在各种设备之间进行数据传输和语音通信。蓝牙技术采用分散式网络结构和快跳频技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM频段,其数据速率为1Mbps,采...

关键字: 蓝牙通信 蓝牙模块

2023年6月1日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 即日起供货Murata的Type 2BZ Wi-Fi®+蓝牙模块 (LBEE...

关键字: Wi-Fi 蓝牙模块 物联网

TR7220B2S蓝牙模组是一款低功耗,高性能和高集成度蓝牙 5.0 BLE,工作在 ISM 频段 2400MHz-2483.5MHz。 TR7220B2S 模组提供最高集成度,最低外围 BOM 成本,在产品整机系统设计...

关键字: 蓝牙模组 蓝牙模块

TR7220B3L 蓝牙模组是一低功耗,高性能和高集成度蓝牙 5.0 BLE,工作在 ISM 频段 2400MHz-2483.5MHz。模组提供最高集成度,最低外围 BOM 成本,在产品整机系统设计上更简易加速产品开发上...

关键字: 蓝牙模组 蓝牙模块

平时使用串口打印出现乱码的,绝大部分原因是串口波特率没对。那么,我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念。什么是波特率、比特率?比特率(Bitrate)表示每秒钟传输的二进制位数,单位为比特每秒...

关键字: 串口通讯

2021年8月16日 – 专注于引入新品的全球电子元器件授权分销商贸泽电子 (Mouser Electronics) 即日起备货Renesas Electronics RX23W模块。

关键字: 贸泽电子 物联网 蓝牙模块

USR-N580是有人物联网新开发的一款工业级8串口服务器,8串口独立工作、互不影响;双网口设计,支持交换机功能,可级联,有效扩展串口数量;采用Arm Cortex-M7方案,数据传输速度快且稳定可靠;内部集成TCP/I...

关键字: 物联网 RS485 串口通讯 串口 串口服务器 交换机
关闭