串口通信是单片机学习的一个最基本、最重要的功能之一。串口通信可以间接的当做调试接口使用,实现单片机与电脑之间的通信。当然可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具。
STM8S的通用异步收发器(UART)主要特性:
● 全双工的,异步通信
● 可编程数据字长度(8位或9位)
● 可配置的停止位-支持1或2个停止位
一般的,我们使用串口通信主要是关心几点参数:波特率、停止位、奇偶校验位。
其次就是如何发送、如何接收数据,这里介绍的使用阻塞式发送数据、中断方式接收数据。
以下代码是初始化串口,参数为:115200 1停止位 无校验位
void Init_UART1(void)
{
CLK_PCKENR1 |= 0X04; //使能USART1时钟
UART1_CR1=0x00;
UART1_CR2=0x00;
UART1_CR3=0x00;
// 必须先写BRR2
// 例如对于波特率位115200时,分频系数=16000000/115200=139
// 对应的十六进制数为008B,BBR1=08,BBR2=0B
UART1_BRR2=0x0B;
UART1_BRR1=0x08;
UART1_CR2=0x2c;//允许接收,发送,开接收中断
}
波特率设置需要通过计算,STM8S的默认主频是16M,得到写入寄存器的数为139。注意,这里需要先写入BRR2再写入BRR1,且格式特殊:
BRR1应夹在BRR2之间!(需要修改波特率需要好好理解)
编程手册描述如下:
阻塞式发送函数(发送一个字节)如下:
void SendChar(u8 dat)
{
while((UART1_SR & 0x80)==0x00);
UART1_DR = dat;
}
只需要将数据加载到UART1_DR寄存器里就算是OK。
终端接收数据函数如下:
//将收到的数据再发送出去
#pragma vector= UART1_R_OR_vector//0x19
__interrupt void UART1_R_OR_IRQHandler(void)
{
u8 res;
res = UART1_DR;
return;
}
使用中断需要声明中断函数入口,并且指定中断表序号(串口1接收中断向量为0x19):
#pragma vector= UART1_R_OR_vector//0x19
__interrupt void UART1_R_OR_IRQHandler(void)
只要串口接收到一个字节的数据就会立即进入此函数,数据存放在UART1_DR寄存器中。
注意:要使用中断这个功能需要在mian函数中加入开启中断语句:
_RIM;
附上stm8s在IAR环境下的项目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。
http://download.csdn.net/detail/devintt/9454188
上一篇:关于我对IIC协议的一些理解
下一篇:STM8-利用TIM2的定时功能,实现灯每隔1S闪烁
推荐阅读
史海拾趣
Aeroflex是一家提供高性能测试和测量解决方案的公司,在航空航天、国防、通信和工业等领域拥有广泛的应用。以下是Aeroflex公司发展的五个相关故事:
公司成立和早期发展: Aeroflex公司成立于1973年,最初是一家由David King在新泽西州创建的小型创业公司,专注于为航空航天和国防行业提供测试和测量设备。随着公司在测试领域的技术积累和市场认可,其业务逐渐扩大,开始在全球范围内提供解决方案。
技术创新和产品发展: Aeroflex致力于技术创新,不断推出符合行业标准和客户需求的新产品。公司在射频和微波测试领域取得了突破,推出了一系列高性能测试仪器和系统,包括信号发生器、频谱分析仪和网络分析仪等,为客户提供全面的测试解决方案。
全球扩张和市场拓展: 随着市场需求的增长和业务规模的扩大,Aeroflex逐步在全球范围内建立了广泛的销售和服务网络。公司在美国、欧洲、亚洲和其他地区设立了多个分支机构和办事处,以加强对客户的支持和服务,并拓展新的市场领域。
公司并购和战略合作: 为加速业务增长和拓展技术能力,Aeroflex通过并购和战略合作不断扩大业务范围。公司先后收购了多家具有先进技术和市场地位的企业,加强了在航空航天、国防和通信等领域的竞争实力。
成为关键行业供应商: 长期以来,Aeroflex凭借卓越的技术和服务,成为航空航天、国防、通信和工业等关键行业的重要供应商之一。公司在测试和测量领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的产品和解决方案,赢得了良好的声誉和市场口碑。
迈翔科技深知品质对于企业的重要性。为了确保产品质量,公司引进了ISO9001管理体系,并严格按照该体系进行生产和管理。此外,公司还建立了完善的质量检测体系,对每一批产品进行严格的质量检测和控制,确保产品出厂合格率达到了行业领先水平。
随着技术的不断进步,Altonics公司始终保持着对创新的热情。公司加大研发投入,引进高端技术人才,不断推出具有创新性和竞争力的新产品。其中,公司自主研发的一款智能传感器,凭借其高精度、高稳定性的特点,迅速占领市场份额,成为工业自动化领域的明星产品。
高频电子的业务范围广泛且多元化,主要包括FEI-NY、Gillam-FEI和FEI-Zyfer三个部门。FEI-NY部门主要负责纽约总部设施和子公司FEI-Asia与FEI-Elcom的运营;Gillam-FEI部门则负责比利时与法国的业务,并专注于电缆网络同步产品的设计、研发和生产;FEI-Zyfer部门则主要经营公司加州业务,并设计生产附带GPS技术的产品。这种多元化业务布局不仅降低了公司的经营风险,还实现了各业务之间的战略协同和资源共享。
为了进一步提升竞争力,Alan Industries Inc.积极寻求与其他企业的战略合作。公司与多家知名供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和成本控制。同时,公司还通过并购和投资等方式,整合了产业链上下游资源,形成了完整的产业生态圈。这些战略举措使得公司在市场竞争中更具优势,实现了快速发展。
为了保持技术领先地位,Empro Technology Corp不断加大研发投入,在多个技术领域取得了重大突破。公司申请了一系列专利,涵盖了芯片设计、制造工艺、应用技术等多个方面。这些专利的积累不仅保护了公司的技术成果,也为公司的长期发展奠定了坚实的基础。
关于:wince4.2的SDK包,安装以后在evc环境下string定义出错! inking... testgpioDlg.obj : error LNK2019: unresolved external symbol "void __cdecl std::_Xlen(void)" (?_Xlen@std@@YAXXZ) referenced in function "private: bool __cdecl std::basic_string<char,struct std::char_traits<char ...… 查看全部问答∨ |
各位大侠, 小弟初次使用keil, 用C做一个非常小的51系列单片机试验小程序, 程序如下: #include <reg52.h> #define uint unsigned int sbit gate1=P2^0; & ...… 查看全部问答∨ |
利用AT89C51定时中断产生的载波频率达不到38K,只有12K左右,这是什么原因? 还有计数部分 endcount=223,产生9MS起始码,这是怎么计算的啊?按26us中断一次9MS应该是346啊? 例码如下: #include<reg52.h> static bit OP; & ...… 查看全部问答∨ |
如何在IAR5.30上使用STM32的v3.0.0固件库进行应用开发 这个文档虽然是按照固件库V3.0.0介绍的,但同样适合于固件库V3.1.0版本。 请下载附件,在解压缩后,点击文件Using_STM32_Firmware_Library(3.0.0)_On_IAR_EWARM_v5.30.pps观看。 Using_STM32_Firmware_Library(3.0.0)_On_IAR ...… 查看全部问答∨ |
【TI技术文章】:KeyStone 多核SoC工具套件:单个平台满足所有需求 过去,实施和部署多核片上系统 (SoC) 器件的一大挑战一直都是为编程和调试这些平台提供适当的工具。开发人员要充分发挥多核性能优势,就必须进行高效率分区,并在这些核上运行高质量软件。TI 支持 KeyStone 扩展的 Code Composer StudioTM (CCStudi ...… 查看全部问答∨ |
我现在用MSP430G2553做键盘实验,但是老是不成功,我还没按键盘,总是直接级进中断了。用的是中断的方法做的。由于我的4*4键盘坏了,所以我自己在面包板上面搭了一个只能有4个按键的键盘,但是作用完全一样,因为我用查询的方式写的代码已经验证成 ...… 查看全部问答∨ |
大侠们 调试发现c2000 launchpad执行以下语句有如下问题,跪求解释, GpioDataRegs.GPADAT.bit.GPIO0 = 0; GpioDataRegs.GPADAT.bit.GPIO1 = 0; GpioDataRegs.GPADAT.bit.GPIO2 = 0; GpioDataRegs.GPADAT.bit.GPIO3 = 0; 四条语句对应四个 ...… 查看全部问答∨ |