Stm8的串口:主要功能:
1:支持异步传输所以成为UART
2:lin模式 主从
3:红外编码模式
4:智能卡模拟功能
以上功能并不是所有串口都支持,stm8最多的是3个串口,配置简单,多说无益
本来想先写定时器1来着,可手头上正好有串口的程序,整理整理先贴上来呗~
首先到stm8s_conf.h把 #define _UART3 (1) 打开,否则uart3不能用,重新编译一下静态库
贴main.c代码:
#include "stm8s.h"
/*========内部高速时钟初始化========*/
void init_hsiclk(void)
{
CLK_DeInit(); //寄存器复位
CLK_HSICmd(ENABLE); //内部高速时钟使能
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2); //内部8分频 2M
}
/*==========串口初始化===========*/
void init_uart3(void)
{
UART3_DeInit(); //复位
UART3_Init(9600,UART3_WORDLENGTH_8D,UART3_STOPBITS_1,UART3_PARITY_NO,UART3_MODE_TXRX_ENABLE);//9600,8,1,0 读写使能
UART3_Cmd(ENABLE);
}
/*========GPIO初始化========*/
void init_gpio(void)
{
GPIO_DeInit(GPIOD); //PD口复位
GPIO_Init(GPIOD , GPIO_PIN_2 , GPIO_MODE_OUT_PP_LOW_SLOW); // LED2初始化 推挽输出
}
/*========延时函数===========*/
void delay(u16 n)
{
u16 i=0;
while(n--)
{
for(i=0;i<330;i++);
}
}
/*========主函数===========*/
void main(void)
{
init_hsiclk();
init_gpio();
init_uart3();
while (1)
{
if(UART3_ReceiveData8()==0xAA) //发送0xAA,则灯闪发0xBB
{
UART3_SendData8(0xBB);
GPIO_WriteReverse(GPIOD,GPIO_PIN_2);
delay(1000);
}
}
}
附:LIN简介
LIN协会创建于1998年末,最初的发起人为五家汽车制造商,一家软件工具制造商以及一家半导体厂商。该协会将主要目的集中在定义一套开放的标准,该标准主要针对车辆中低成本的内部互联网络(LIN, local interconnect networks),这些地方无论是带宽还是复杂性都不必要用到CAN网络。LIN标准包括了传输协议的定义、传输媒质、开发工具间的接口、以及和软件应用程序间的接口。LIN提升了系统结构的灵活性,并且无论从硬件还是软件角度而言,都为网络中的节点提供了相互操作性,并可预见获得更好的EMC(电磁兼容)特性。
LIN补充了当前的车辆内部多重网络,并且为实现车内网络的分级提供了条件,这可以有助于车辆获得更好的性能并降低成本。LIN协议致力于满足分布式系统中快速增长的对软件的复杂性、可实现性、可维护性所提出的要求,它将通过提供一系列高度自动化的工具链来满足这一要求。
LIN总线的主要特性为:
*单主站以及多从站概念;
*基于常用的UART/SCI硬件接口,以及相应的软件,或作为纯粹的状态机,从而保证较低的成本;
*从节点中无须石英或陶瓷振荡器就可以实现自同步;
*信号传输实体确定,在增强系统中可以计算信号的传播(propagation)时间;
*信号基于应用交互层。
LIN网络由一个主节点以及一个或多个从节点组成,媒体访问由主节点控制--从节点中不必有仲裁或冲突管理。可以保证最差状态下的信号传输延迟时间。
LIN物理层
总线驱动/接收器的定义遵循ISO 9141单线标准,并带有一些增强性能。总线为单线传输,"与"总线通过终端电阻由电池正极节点(VBAT)提供。总线收发器采用增强型的ISO 9141实现标准。总线可以取两个互补的逻辑值:主控值其电压接近于接地端,代表逻辑值"0",退让值其电压与电池电压接近,代表逻辑值"1"。
总线采用上拉电阻作为终端,主节点的上拉电阻为1kOhm,从节点的上拉电阻为30kOhm。电阻需串联一个二极管以防止由于本地电源泄漏对总线产生的干扰。从节点的终端电容通常值为 CSlave= 220pF,主节点的电容要更高以使整个总线的电容小于从节点的值。
由于采用单线媒质传输,最大的传输波特率被限定在20kbit/s以内。该值为从满足信号同步而不产生冲突的最高值,到为满足电磁兼容性要求而要达到的传输最低值之间的实验中间值。最小的传输波特率为1kbit/s--这有助于避免在实际中产生超时冲突。
LIN协议
通过LIN总线传输的实体为帧。一个报文帧由帧头以及回应(数据)部分组成。在一个激活的LIN 网络中,通讯通常由主节点启动,主节点任务发送包含有同步间隙的报文头,同步字节以及报文标志符(ID)。一个从节点的任务通过接收并过滤标志符被激活,并启动回应报文的传送。回应中包含了1到8个字节的数据以及一个字节的校验码。
传输一帧所花费的总的时间是发送每个字节所用的时间,加上从节点的回应间隙,再加上传输每个字节的间隙时间(inter-byte space)。字节间隙是指发送完前一个字节的停止位后到发送下一个字节的启动位之间的时间。
帧内部间隔(inter-frame space)是从上一帧发送完毕后到下一帧启动发送间的时间间隔。
帧的结构如图1所示。帧由帧间间隔以及接下来的4到11个字节域组成。
图1:帧结构
信号在帧的数据域中传送。多个信号可以打包在一个帧中传送,只要这些信号不彼此重叠即可。
每个信号只有一个明确的传输者,例如,通常由一簇(cluster)节点中的一个来写,0、1或多个节点订阅该信号。
LIN协议的核心特性是使用进度表(schedule table)。进度表有助于保证总线不出现过载的情况,他们同样是保证信号定期传输的核心组件。
在一组LIN节点中只有主节点任务才可以启动通讯保证了行为的确定性。主节点有责任保证与操作模式相关的所有帧都必须分配了足够长的传输时间。
LIN应用
采用LIN可实现车内网络分级,从而成为车辆制造商提供更高的质量及更低成本的重要因素。它可以为工业领域的软件开发提供最好的实现方式:抽象及更好的组合能力。LIN可以简化很多现有的低端复合解决方案,并且可以降低车辆电子系统的开发、生产、服务及后勤成本。
采用配备LIN的轿车生产线正在快速增长,而下一代轿车雄心勃勃的计划也许是LIN成功的最好证明。简捷而完整的LIN规范包含了完整的网络概念,极高的自动化程度已经使LIN和CAN成为了车内通讯网络的主干。一部分市场增长甚至出现在车内网络部分减少的地方。
2003年发布的LIN 2.0规范增强了组件在不同车辆生产厂商间的通用性,并且通过引入节点能力描述文件(Node Capability Description File)增强了自动化设计能力,同时还对同一网络中的相同LIN设备定义了重配置机制。
上一篇:STM8 寄存器与官方库的组合使用
下一篇:STM8L151在STVD/IAR下重定向printf函数
推荐阅读最新更新时间:2024-03-16 16:04