ST 3合一开发板stm8学习之 CSS 早就听说了ST的STM8S和STM32, 一直没有机会试试。 最近看见ST又再搞推广活动, 就从微芯力科公司的优惠购买了ST MCU的三合一开发板套件(STM32最小系统,STM8S开发板和STLINK)。并从他们的工程师处获得了一些代码和技术支持。不敢专享其美。写了些心得,与大家分享。 一 程序简介: 该工程主要涉及到gpio和rcc,tim部分,工程实现的功能是系统时钟内部和外部的切换已验证系统时钟的的安全性,当外部时钟失效时 会自动切换到内部时钟运行 时钟特征: 1 强大的控制器,更容易得到高性能的同时保证功率最低 2 可独立管理的时钟源,都带有分频器 没有倍频 可以得到更高精度的时钟 3 可靠的无障碍时钟切换机制。程序运行中可以切换时钟源 4 抗干扰时钟配置寄存器,大部分时钟寄存器有一个互补寄存器,如果不匹配就会产生复位(系统自动完成) 时钟源: 1—24m外部晶振 外部时钟信号 最高24m //以上为HSE 16m高速内部rc振荡器 // HSI 128k低速振荡器 //LSI 言归正传 看我的程序: 程序的现象是下载运行后,四个led会按照tim中断的频率 循环依次点亮,此时如果破坏外部晶振,时钟源会自动切换到内部时钟,现象是led点亮间隔变大了。 二 程序配置: 1. Led----gpio void GPIO_Init(void) { LED1-3===PD0 PD1 PD3 PD_DDR |= 0x0D; /*8位寄存器DDR用来配置io口的输入输出模式,每一位对应相应名称的io口 这里我们配置 0, 1, 3位为输出 (1为输出,0为输入). 即 00001011==0D */ PD_CR1 |= 0x0D; /* CR1配置输入输出模式下的 功能,在输出模式下为 : 0 开漏输出 1 推免输出 */ PD_CR2 = 0x00; /* 输出最大速度到2MHz 1:配置为10m. */ } 请看stm8手册 gpio部分 Io配置的知识: 推挽输出与开漏输出的区别: >>推挽输出:可以输出高,低电平,连接数字器件。 输出 0 时,N-MOS 导通,P-MOS 高阻 ,输出0。 输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。 >>开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。 输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。 2.LED--时钟配置: void CLK_Init(void) { /* Configure clock prescaler */ CLK_CKDIVR = 0x01; /*分频时钟源 */ /* To select external source by automtic switch */ CLK_SWCR |= 0x02; /* 使能转化 */ CLK_SWR = 0xB4; /* 时钟源选择 选择HSE*/ |
3åä¸å¦ä¹ ç¬è®°.doc
下载151.5 KB, 下载次数: 157, 下载积分: ST金币 -1
RE:st 3合一开发板stm8 学习连载
作者:萧星
程序功能:
接受超级终端输入的值 并显示出来
还得说点上次的 时钟的问题,因为后面可能很少看到配置时钟的部分 所以有必要澄清一下初始化时的状态------1.内部高速rc振荡器提供时钟源 16m
2.时钟分频为8
3.供cpu的时钟是his/8
Ok,现在大家对芯片默认状态有了一点了解,下面开始串口的研究。
Stm8的串口:主要功能:
1:支持异步传输所以成为UART 2
2:lin模式 主从
3 红外编码模式
4 智能卡模拟功能
以上功能并不是所有串口都支持,stm8最多的是3个串口
也不多说 串口应该是大家很熟悉的一种接口,怎么配置 要配置什么 也都很清楚 我就简单说一下配置的地方:
1 数据位
2停止位
3波特率
4使能发送或者接受模块(要中断功能的使能中断|)
这样uart就配置好了 可以发送和接收数据了
说几个主要标志位:
发送端:TXE
硬件置一 说明数据从寄存器移到了 移位寄存器 传输开始了,下一个数据可以写入寄存器了,此时如果使能相应中断 中断将会产生
TC
数据传输完成置位 在停止位i从移位寄存器发送完后tc置位
TXE和TC有什么区别?后面我说了一下自己的想法
接受部分:RXNE置一 接收端移位寄存器的值放到了寄存器中,接收完成可以读取接受的数据。相应中断标志位置位时产生中断。RXNE必须在下一个数据接收完成前清零,读接受寄存器和软件直接写0都可以清除该位。
其他扩展功能 请参考stm8 手册
Ok 现在通过程序 我们来看一下串口的通信配置过程:
配置串口
LINUART_CR1 = 0x00;CR1配置了很多的东西,数据位 校验位 校验中断等 这里配置为8为数据位 无校验 无校验中断
LINUART_CR3 = 0x00; 配置了 停止位 数据相位和极性(同步模式下,用来同步的)但是此处禁止了同步功能 配置为一个停止位
LINUART_BRR2 = 0x0B;
LINUART_BRR1 = 0x08; 这两个寄存器是配置串口波特率 总共是16位 :BRR1是16位中的中间8位,BBR2低4位是16位中的低四位,高4位是16位的高四位
这里我们配置为115200 即 16m/115200==139==0x008B
LINUART_CR2 = 0x0C; CR2用来配置接受使能和中断使能的寄存器,这里配置为接受发送使能
Ok 到此配置完成
发送接受程序:
while(1)
{
printf("\nLINUART Example lease press 1 key from keyboar
下面 会给出内部程序
for (i=0;i
RE:st 3合一开发板stm8 学习之css
if (CLK_CMSR != 0xB4) 检测是不是配置的时钟源
while(1);
/*以上是配置时钟源 只是单单的选择时钟源
CLK_CSSR |= 0x01; 这句才是本历程的关键 使能时钟安全机制 因为它检测的只是外部时钟 所以才有上面配置时钟源的程序,因为默认情况下是HSI/8
注:MCU 一但使用了辅助时钟源 即使外部时钟正常也切换不回去了 直到下一次复位。
}
结合程序看下图
3.LED---tim
Stm8拥有6个定时器 其中
Tim1 16高级定时器
Tim 2 3 5 16位通用定时器
Tim 4 6 8位基本定时器
本程序用的是tim4 8位的
void TIM_Init(void)
{
/* TIM4 Peripheral Configuration */
/* Time Base configuration */
TIM4_PSCR = 0x04; /* 分频值 =16. */
TIM4_ARR = 0xFF; /* 重载入值 */
/*TIM4 counter enable */
TIM4_CR1 |= 0x01; /* 开启tim4 */
TIM4_IER |= 0x01; /*开启计数更新中断. */
}
Tim4 功能较少 配置相对简单
主要功能:8位向上计数自动重装
3位可编程预分频
中断 计数中断
Tim6还有输入信号同步和检测中断 功能。
Ok 到这里这个程序功能就说完了。
回复:st 3合一开发板stm8 学习之css
RE:st 3合一开发板stm8 学习连载
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设备定义了重配置机制。
RE:st 3合一开发板stm8 学习连载
http://www.stmsky.com/bbs/viewthread.php?tid=16&extra=&page=1
回复:st 3合一开发板stm8 学习连载
RE:st 3合一开发板stm8 学习连载
回复:st 3合一开发板stm8 学习连载
RE:st 3合一开发板stm8 学习连载