一、首先进行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,这里就不需要想接受中断服务函数中需要清标志位,这边是硬件自动清除,
上一篇:用 IAR 开发 STM8 时,简单软件延时不起作用的原因
下一篇:stm8s003中串口中断问题
推荐阅读最新更新时间:2024-11-03 15:02
设计资源 培训 开发板 精华推荐
- 具有迟滞功能的 NCV33074ADR2G 低输入电压比较器的典型应用
- ADR3433 3.3V 输出微功率、高精度电压基准的典型应用
- MIC29202WT 400mA低压降稳压器典型应用
- FC-12M,ML7125-00x 32.768kHz 晶振单元的振荡电路及选型指南
- ADP2102-1.2-EVALZ 用于降压型 DC 至 DC 转换器解决方案的评估板
- KIT-15258,SparkFun ESP8266 事物入门套件
- 使用 Analog Devices 的 LTC2629CGN-1 的参考设计
- 用树莓派 pi pico 制作的桌面笔架和日历
- 【STC炼丹炉】89C52RC最小系统
- 具有浪涌电流控制的低压热插拔控制器