STM8S003F3串口中断发送问题
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串口中断发送问题相关推荐
- 基于STM32F103RCT6实现串口中断发送,使用环形队列
文章目录 一.开发环境 二.串口中断发送原理 三.实验现象 四.完整源码 五.后记 一.开发环境 /************************************************** ...
- 【HAL库】STM32F407ZGT6实现串口中断发送和接收
** [HAL库]STM32F407ZGT6实现串口中断发送和接收 (保姆级教写代码1) ** 前言 根据近期所做的项目,想给大家分享一些有关STM32的各类通信方式的代码教程,都是基于STM32HA ...
- 8051单片机的中断发送
最近使用c8051做开发,串口程序移入工程时,整个程序竟然不跑了,加断点,调试,发现在串口查询发送出了问题,程序在查询发送完毕的时候,竟然死在这,就是while(TI0==0)这地方,用其它型号单片机 ...
- ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收
串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...
- STM32串口的使用(原理、结构体、库函数、串口发送字符(串)、重定向printf串口发送、串口中断接收控制灯)
参考:串口的结构体 重定向printf串口发送stm32等博文 作者:点灯小哥 发布时间: 2021-03-06 21:46:33 网址:https://blog.csdn.net/weixin_46 ...
- FPGA 串口中断_一个严谨的STM32串口DMA发送amp;接收(1.5Mbps波特率)机制
昨天分享的<嵌入式大杂烩读者福利:第一期>大家有去抽奖吗,没抽的可参与抽奖,碰碰运气.我最喜欢抽奖了,还记得前几个月疫情严重时期连抽中了3包口罩,真刺激,哈哈.之后多多安排抽奖,敬请期待. ...
- 51单片机stc15w204s串口通信发数据接收数据串口中断发中文字符串完美运行软件延时发送一字节函数全注释
这里写自定义目录标题 KEIL自己先调试通了然后再说下面的事 51单片机stc15w204s串口通信直接上文件 KEIL自己先调试通了然后再说下面的自己看看就可 KEIL自己先调试通了然后再说下面的事 ...
- 采用串口中断方式实现串口通信:停止/持续发送“hello windows!”
文章目录 一.stm32接收到字符"s"/"t"时停止/持续发送"hello windows!" 1.STM32CubeMX工程创建 2.程 ...
- hal库串口dma卡死_STM32 HAL库 串口DMA发送完成中断
近期使用STM32驱动MAX3485进行485通信,发现STM32F103C8并不自带硬件485首发功能,需要软件上控制IO高低来驱动MAX3485进行485接收.485发送. 根据MAX3485手册 ...
- 利用STM32 的串口来发送和接收数据实验
0目标 1 STM32 串口简介 2 硬件设计 3 软件设计 4 下载验证 0.目标 利用串口 1.STM32 串口简介 串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO ...
最新文章
- 博士因高校“虚假招聘”待遇不符辞职,却反被索要138万违约金,这是什么操作?...
- 单片机怎么学?新手怎么快速学会单片机?
- python如何读取数据集_如何在Python中读取通用数据格式(CDF)
- 关于nginx信号控制的“故障”案例
- jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题
- java论文翻译_Java技术(外文文献翻译)
- Statues(三维bfs)
- 2 JVM 运行机制
- linux网络包截获,用C实现截获网络数据包
- Windows下Zookeeper启动zkServer.cmd闪退问题的解决方案
- 个人理解的块状格式化上下文
- php mvc框架单例,ZeroPHP: 开发的第一个PHP框架 遵循MVC架构设计。
任重道远。
- 2.1.PHP7.1 狐教程-【PHP基础】
- 基于FFmpeg的Qt视频播放器
- 「 Adams 」如何设置积分器与求解器类型
- Mac中vim的快捷操作
- 《和码中文》第一册词组(共25课)
- word中图片为嵌入式格式时显示不全_“word嵌入式图片不显示的解决办法”的解决方案...
- Prolog实现太阳系星体识别专家系统
- DenseNet——密集连接的卷积神经网络