1 / 14
文档名称:

【最新】stm8教程-第十二章-串口及其应用.docx

格式:docx   大小:554KB   页数:14页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

【最新】stm8教程-第十二章-串口及其应用.docx

上传人:吴老师 2022/7/28 文件大小:554 KB

下载得到文件列表

【最新】stm8教程-第十二章-串口及其应用.docx

相关文档

文档介绍

文档介绍:STM8教程-第十二章-串口及其应用
第十二章 串口及其应用
前面三节介绍了 STM8 的 IO 口以及时钟编程。这一节我们将学****STM8 的串口。通过本节学****你将了解到 STM8 串口的根本使用方法。
前面三节介绍了Sue);
int main( void )
{
unsigned char temp = 0;
CLK_CKDIVR = 0x00; //主频为16M
UART1_CR1 = 0x00; //关闭UART,设置数据位8位,禁止奇偶效验,禁止中断
UART1_CR3 = 0x00; //一位停止位,默认值
UART1_BRR2 = 0x0b; //设置波特率为115200
UART1_BRR1 = 0x08;
UART1_CR2_TEN = 1; //使能发送
while(1)
{
while(!UART1_SR_TC); //等待一帧发送完毕,再传送下一帧
UART1_DR = temp;
temp++;
if(temp>=255)
temp = 0;
delay_ms(100);
}
}
/*
********************************************
简单延时程序
********************************************
*/
void delay_ms(int value)
{
int i,j;
if(value < 1)
value = 1;
for(i=0;i!=value;++i)
for(j=0;j!=5000;++j);
}
编译下载后,翻开串口调试助手,复位单片机就可以看到对应的数据输出,如以下图:
可以看出是从 0 递进的数,因为我们的串口设置是 115200 波特率,所以串口调试助手也对应这个波特率
例程二、串口接收及发送
我们实现的功能是通过串口接收电脑的数据,并把对应的数据发送给电脑。这里我们采用了中断的方式来接受。中断这个字眼是第一次出现在我们的实验中,所以略为简要说一下中断。简单来说中断的产生会让
CPU 停止当前的工作而转到特定的地方运行预先设定好的程序。我们的例程就是在接到到串口的数据后,由单片机硬件置位而产生一次接收数据的中断,本身中断向量号是 18,但是 IAR 的规定要加上 2,所以这个中断号是 20,转为 16 进制是 0x14 因此我们可以在这个中断的效劳函数中把刚接受到数据发回给电脑,软件代码如下:
#include ""
void delay_ms(int value);
int main( void )
{
CLK_CKDIVR = 0x00; //主频为16M
UART1_CR1 = 0x00; //关闭UART,设置数据位8位,
//禁止奇偶效验,禁止中断
UART1_CR3 = 0x00; //一位停止位,默认值
UART1_BRR2 = 0x0b; //设置波特率为115200
UART1_BRR1 = 0x08;
UART1_CR2_TEN = 1; //使能发送
UART1_CR2_RIEN= 1; //接收中断使能
UART1_CR2_REN = 1; //使能接收
PD_DDR_DDR0 = 1;
PD_CR1_C10 = 1;
PD_ODR_ODR0 = 1;
asm("rim"); // 开全局中断
while(1)
{
delay_ms(100);
}
}
/*
********************************************
简单延时程序
********************************************
*/
void delay_ms(int value)
{
int i,j;
if(value < 1)
value = 1;
for(i=0;i!=value;++i)
for(j=0;j!=5000;++j);
}
#pragma vector=0x14
__interrupt void UART1_RX_IRQHandler(void)
{
unsigned char temp;
temp = UART1_DR;
PD_ODR_ODR0 = ~PD_ODR_ODR0; //指示灯
while(!UART1_SR_TC); //等待一帧发送完