前段时间做了一个项目,有部分功能是接收串口命令,根据命令保存一些系统数据(用STM8S内自带的EEPROM)。项目完成之初用串口调试工具发单条命令可以正常接收保存,但用一个上位机软件连续发命令(约20ms)时单片机死机了。IDE用的是IAR,虽说可以直接在线调试,但这个IDE不能在运行时设置断点,所以找了好久一直没有查到程序停在了哪里,直接代码单步执行跑得有点奇怪,但进出中断也正常。后来改用汇编界面单步,发现程序都是在进栈出栈这些指令才怀疑是不是有一直进出中断,而进出中断肯定是中断标志置位了。找出STM8S规定书仔细一查才发现STM8S的UART还有个“过载错误”,要命的是此“过载错误”是产生中断的,以前用的51没发现有过载错误这一说,AVR有,但不产生中断。呵呵,知道原因了问题当然好解决。下面我最新的一个处理UART中断的方法,给新手参考参考,我想用到其它MCU也是一样的道理;如果是老手路手请多指点以完善UART的接收。
#pragma vector = UART1_R_RXNE_vector // 20
__interrupt void ISR_UART1_RECEIVE(void)
{
BYTE tempDa;
if (UART1_SR_OR_LHE)
{
// 发生过载错误,顺序读UART1_SR, UART1_DR来清UART1_SR_OR_LHE位
tempDa = UART1_SR;
tempDa = UART1_DR;
// 做一些错误处理
}
else
{
tempDa = UART1_DR; // 之所以用临时变量是因为UART1_DR随时会变
switch (RecvStatus)
{
case XXXX:
break;
}
}
}
关键字:STM8S103xx 串口 中断
引用地址:
STM8S103xx串口一直中断
推荐阅读最新更新时间:2024-03-16 15:32
TQ2440国嵌学院gboot-关闭中断
继续学习核心初始化-关闭中断 中断的概念大家都不陌生,在89C51单片机系列中都有介绍中断的概念,在89C51单片机中,也会对中断进行初始化,那么在TQ2440中如何关闭中断呢? 同样也是要阅读S3C2440芯片手册,在S3C2440手册中有一节专门介绍中断:INTERRUPT CONTROLLER,该章节主要针对中断的介绍和中断寄存器的介绍。 2种中断模式:The ARM920T has two types of Interrupt mode: FIQ or IRQ,也就是快速中断和中断 关于中断的几个寄存器 SOURCE PENDING (SRCPND) REGISTER INTERRUPT MODE (INTMOD)
[单片机]
485-串口硬件相关问题分析
uart整体框图见下表: USART 寄存器: usart初始化过程 void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct) { uint32_t tmpreg = 0x00, apbclock = 0x00; uint32_t integerdivider = 0x00; uint32_t fractionaldivider = 0x00; RCC_ClocksTypeDef RCC_ClocksStatus; /*---------------------------- USART CR2 Configurati
[单片机]
IAR For AVR 串口中断接收
应用芯片: AT Mega16 晶振: 7.3728MHz 代码文件: uart_int.c |_________DELAY.H ############################################## DELAY.H : #ifndef __IAR_DELAY_H #define __IAR_DELAY_H #include intrinsics.h #define XTAL 7.3728 //可定义为你所用的晶振频率(单位Mhz) #define delay_us(x) __delay_cycles ( (unsigned long
[单片机]
TMS320C54x系列DSP的中断机制
1 C54x中的中断机制 中断信号实质上是由硬件或者是软件驱动的信号,它能使 DSP 暂停正在执行的程序并进入中断服务程序(ISR)。在最典型的DSP系统中,如果A/D转换器需要送数据到DSP中,或者D/A转换器需要从DSP中取走数据,都是通过硬件中断向DSP发出请求的。 C54x系列DSP支持软件中断和硬件中断。软件中断是由指令(INTR、TRAP、RESET)触发的,硬件中断是由外围器件触发的。硬件中断实际上又分为两类:一类是由DSP的片外外设(如A/D转换器)触发的,另外一类是由DSP的片内外设(如定时器中断)触发的。硬件中断又有优先级的区分,这是为了处理同一时刻有多个硬件中断源触发中断的情况
[嵌入式]
STM32CUBE HAL库 关于串口usart收发的一个问题
最近项目中遇到了一个问题,因为开始用freertos,然后想加入串口收发功能。打印正常,但是加入接收中断后,开始出bug,最后锁定接收中断挂掉了。 原因:HAL库的串口接收发送函数有bug,就是收发同时进行的时候,会出现锁死的现象。 解决:需要注释掉 HAL_UART_Receive_IT 和 HAL_UART_Transmit_IT 中的 __HAL_LOCK(huart) 函数 -----------------------------------------------------------------------------------------------------------------------
[单片机]
stm32——串口1和串口2初始化
void USART1_Initialise(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); //USART1_TX PA.9 GPIO_InitStructur
[单片机]
51单片机串口通信软件程序集
串口通信的单片机程序 beep bit p3.7 ;蜂鸣器定义 org 00h jmp main org 23h ;串行中断入口地址 jmp com_int ;串行中断服务程序 ;*********** 主程序开始 ******************* org 30h main: mov sp,#30h ;设置堆栈 lcall rest ;初始化 lcall comm ;串口初始化 jmp $ ;原地等待 ; ******
[单片机]
基于双向透明串口扩展技术的多参数监护仪设计方案
嵌入式多参数监护仪系统中一般包括多个独立的硬件 采集模块 ,每个硬件采集模块分别完成对人体的心电、呼吸率、体温、血压和血氧饱和度等生理参数的采集,并通过其 串口 接收HOST端的控制信息,定时向HOST端发送采集数据。
本嵌入式多参数监护仪HOST端使用 AT91RM9200 处理器 ,该处理器具有4个通用同步/异步接收/ 发送器 (USART),其中一个是DEBUG串口,但它们都是分时复用的 。为了使HOST端更好地与各采集模块进行通信,必须解决其串口扩展的问题。
目前比较通用的串口扩展方案主要有2种。一种通过硬件实现,使用多串口ARM/ MCU 或专用串口扩展 芯片 ,可供选择的串
[嵌入式]