历史上的今天
今天是:2025年02月17日(星期一)
2020年02月17日 | STM8S103F3实现串口中断接,中断发功能
2020-02-17 来源:eefocus
一、首先进行UART1初始化
/*USART1 config*/
void USART1_Init(void)
{
/*Uart1*/
UART1_CR1=0x00;
UART1_CR2=0x00;
UART1_CR3=0x00;
// 设置波特率,必须注意以下几点:
// (1) 必须先写BRR2
// (2) BRR1存放的是分频系数的第11位到第4位,
// (3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
// 例如对于波特率位9600时,分频系数=2000000/9600=208
// 对应的十六进制数为00D0,BBR1=0D,BBR2=00
//例如对于波特率位9600时,没有分频 = 16000000/9600 = 1666
//对应的十六进制数为0682,BBR1=68,BBR2=02
UART1_BRR2=0x02;
UART1_BRR1=0x68;
UART1_CR2 = 0x2c; //接收,发送使能,开接收中断
}
注意的事项:波特率的设置方式,在UART1初始化中打开了接收,发送使能,但是只打开了接收中断,而发送中断打开在哪里呢?接下来往下看。
二、接收中断服务函数中的操作过程
//将收到的数据再发送出去
#pragma vector= UART1_R_RXNE_vector //0x14
__interrupt void UART1_R_RXNE_IRQHandler(void)
{
u8 data;
if(UART1_SR & 0x20) //收到数据该位置位
{
UART1_SR &= ~0x20; //清接收中断标志位
rs485_data = UART1_DR;
Rev_Slaver_PrePare(data);
}
}
这里采用的接收中断方式不是采用while()去等待接受标志位完成,而是采用接收一个数据就传递一个数据到需要处理的函数,有人可能会说在接收中断中不要去做太多的事情,其实不然,在对接收数据处理函数中其实是对接收到的数据进行存储并不像复杂的逻辑运算而担心中断触发太久。处理函数这边就不贴出来,本文主要的目的是将接收,发送中断的处理方式。
三、发送中断处理方式
void USART1_SendArray(uint8_t *data,uint8_t len)
{
for(uint8_t i = 0;i < len;i++)
{
Tx1Buffer[count1++] = *(data + i);
}
#pragma vector= UART1_T_TC_vector //0x13
__interrupt void SYS_UART1_TX_IRQHandler(void)
{
if(UART1_SR & 0x80)
{
UART1_DR = Tx1Buffer[Tx1Counter++];
if(Tx1Counter == count1)
{
UART1_CR2 &= ~0x80; //关闭发送中断
}
}
}
UART1_CR2 |= 0x80; //直接开启发送中断}
需要发送的数据串,调用此发送函数,将会触发中断发送服务函数,在这里说明一点,stm8s103f3这款芯片的发送中断服务函数与接收中断服务函数不是同一个,这与stm32系列的芯片不太一样,后者是发送和接收中断共用同一个服务函数,在中断向量表中可观察到不同。
#pragma vector= UART1_T_TC_vector //0x13
__interrupt void SYS_UART1_TX_IRQHandler(void)
{
if(UART1_SR & 0x80)
{
UART1_DR = Tx1Buffer[Tx1Counter++];
if(Tx1Counter == count1)
{
UART1_CR2 &= ~0x80; //关闭发送中断
}
}
}
在进入中断发送服务函数中后,将要发送的数据串依次装入UART1_DR,这里就不需要想接受中断服务函数中需要清标志位,这边是硬件自动清除,
史海拾趣
|
本人从事嵌入式软件开发,但一直都是高层应用方面.现在想深入学习一下嵌入式底层的东西. 1. 我现在的目标是学习底层,硬件及驱程方面的东西,很大一部分原因是为以后就业着想.如果大家觉得这方面以后的前景不太好,还请帮忙出出其它注意. 2. 在网上 ...… 查看全部问答> |
|
HT1621是段式,液晶驱动芯片,最近做了一个大的段显,调了两天好不容易成功现在分享哈 先上资料先: 上程: [ 本帖最后由 ddllxxrr 于 2011-6-27 21:21 编辑 ]… 查看全部问答> |
|
MSP430单片机闪存编程的方法有三种: JATG端口、BSL或用户开发程序。通过电脑的并行端口自制下载线连接MSP430单片机的JATG端口编程,这种方法大家已经比较熟悉了。但是在用JATG烧断保密熔丝后,要再想修改闪存程序,就只能用BSL方法了。BSL是启动加 ...… 查看全部问答> |
|
nr_ti坛友在站内短消息中,跟我讨论关于430仿真器的问题,由于有附件需要上传,所以我在论坛上发帖回复。问题描述:\" 将msp430连接仿真器,需要引出哪些引脚?\"MSP430是通过JTAG来进行调试的,下面的内容就是JTAG的讲解。不算上供电,其实就是5 ...… 查看全部问答> |
|
按照 2012 年 RT-Thread roadmap,经过各位同学的努力,RT-Thread 1.1.0 Beta1 版本按时发布了,此版本依然是技术预览版,展示 RT-Thread 未来的发展方向,但不适合用于产品开发。该版本主要是全面更新了 RTGUI 组件;加入了新的驱动框架(usb host ...… 查看全部问答> |
|
程序设计必读图书。开发人员必备---《程序设计语言实践之路》 程序设计语言:实践之路 这是一本很有特色的教材,其核心是讨论程序设计语言的工作原理和技术。本书融合了传统的程序设计语言教科书和编译教科书的有关知识,并增加了一些有关汇编层体系结构的材料,以满足没学过计 ...… 查看全部问答> |




