历史上的今天
今天是: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等。
史海拾趣
|
摘要: 从PCI时序分析入手,重点阐述了PCI通用的状态机设计,说明了用VHDL语言来实现本PIC通信状态机的软件设计以及进行MaxPlusII验证的程序和方法。用该方法所设计的接口既可支持PCI常规传输,又可支持PCI猝发传输。 关键词: PCI时序 CPLD器件 ...… 查看全部问答> |
|
如下是本人编写的《LPCXpresso 平台工程创建》,可以带不熟悉LPCXpresso 平台的网友快速入门。当然本人也是初学,再加上E文不好,错误难免,望高手们多多指教。… 查看全部问答> |
|
想用自己的程序作为shell wince启用时调用自己的程序 1、本来修改了注册表把explorer.exe换成自己的程序了,就是用注册表编辑器修改launch50=“myapp.exe” 在模拟器上是可以的,不知道真机上行不。请问这样做可行么 看有的帖子说wince的注册表 ...… 查看全部问答> |
|
我在一个工程里面加入了2个对话框。在第一个对话框中点击F1显示第二个对话框。在第二个对话框点击退出的时候显示第一个对话框。然后在第一个对话框点击退出的时候可以关闭整个程序。 但是为什么从第二个对话框退出显示第一个个对话框再退出后中是 ...… 查看全部问答> |
|
EVC不能与EMULATOR连接,是什么原因,我安装顺序是没有问题的啊 都不知道什么原因,搞了好就了,网上搜了好多资料去解决还是不行的啊,那位前辈帮解决一下,再次小弟谢过了...... 在安装evc4.0与sp4的时候弹出一个 说emulaotor驱动程序对当前系统造成不稳定,windows无法加载这些驱动程序........ 连接错误信息: on ...… 查看全部问答> |
|
#define _I2C_DEBUG_#ifdef _I2C_DEBUG_ u32 gAu32Tmp[100];#endif// I2C1中断服务程序.void I2C1_EV_IRQHandler(void){ u32 lu32Event; static u8 lu8BusyCount&n ...… 查看全部问答> |




