STM8S003F3串口中断发送问题

发布者:andyliow1980最新更新时间:2022-07-12 来源: csdn关键字:STM8S003F3  串口  中断发送 手机看文章 扫描二维码
随时随地手机看文章

我在用STM8S003F3测试串口中断发送时,按照以前操作DSP28335的思路,要先发送一个字节的数据,才能够触发发送中断,然后数组中的数据随之发送完。


下面是发送函数和中断函数:


void UartTxData(void)

{  

    /* Enable UART1 IT */

    UART1->CR2 |= 0x80;

    

    /* UART1 send data (8bits) */

    UART1->DR = (au8UartTx[0]);

}


 INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)

 {     

  u8TxPos++;

     /* UART1 send data (8bits) */     

     UART1->DR = (au8UartTx[u8TxPos]);

     

     if(u8TxPos> 8)

     {

         u8TxPos=0;

         

         /* Disable UART1 IT */

         UART1->CR2 &= (uint8_t)(0x7f);

     }

 }


按理说当我调用一次发送函数时,我定义的数组就会跟着全部发送完,但是结果却少发了一个字节。少发的字节恰好是首字节,经过一番搜查,我发现了这个

串口中断方式发送过程


在硬件层面:如果是电平触发的中断,在中断式发送函数中会使能相应的中断,因为发送缓冲区为空,其所处的电平状态就在中断功能被使能后会直接触发中断,导致第一个字节在中断处理函数中被发送出去;如果是电平跳变触发的中断,为了引发中断,只好把第一个字节在中断式发送函数中“手动”发送出去,由此引发一个中断的“多米诺”效应,把后面的字节依次发送出去。


也就是说只要我使能了发送中断,那么就会马上跳入中断函数,所以首字节没能发送出去。

为了进一步验证不是其他原因造成的,我去翻看数据手册看到中断触发方式是由外部中断控制寄存器来配置的


然后我去查看外部中断控制寄存器在默认情况下是如何配置的,结果就是下降沿和低电平触发方式,这也就验证了参考链接所说。

stm8s_exti.c文件:


void EXTI_DeInit(void)

{

  EXTI->CR1 = EXTI_CR1_RESET_VALUE;

  EXTI->CR2 = EXTI_CR2_RESET_VALUE;

}


stm8s.h文件:


#define EXTI_CR1_RESET_VALUE ((uint8_t)0x00)

#define EXTI_CR2_RESET_VALUE ((uint8_t)0x00)

关键字:STM8S003F3  串口  中断发送 引用地址:STM8S003F3串口中断发送问题

上一篇:STM8L USART+DMA配置,使用DMA完成串口收发
下一篇:N76E003AT20筋膜枪单片机设计方案

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved