STM32学习——中断方式下的发送数据

发布者:JoyousJourney最新更新时间:2022-01-25 来源: eefocus关键字:STM32  中断方式  发送数据 手机看文章 扫描二维码
随时随地手机看文章

利用中断接收数据较为简单,但利用中断去发送数据弄了半天才搞定。。。


注:在设置USART的控制寄存器的TE位时,会发送一个空闲帧,于是便会进入中断。


错误的做法

本来的思路是中断里的代码尽可能地少,发送字符放在主函数中,类似这样


while(1)

{

USART_SendData(DEBUG_USARTx,Buf[j]);

//Delay(0xfffff);

if(j>=5)

break;

}


然而。。。要是不加Delay延时j就无法在中断服务函数中自加,通过调试,发现调用USART_SendData(),发送完成标志位TC并不是马上置位,该函数只是将数据送入数据寄存器DR,并不代表发送完毕,所以就会乱套。。。而且加了Delay后还会在最后发送一个H,惊了。。。


改进方法

参考了别人的方法,在中断里进行发送

1.利用USART_SendData()触发TC中断,然后在中断中一直发送,直到最后一个字节


//发送函数

void uart_senddata(u8* ptr)

{

ptrdata=ptr;

USART_ClearFlag(USART1, USART_FLAG_TC); //如果不加的话可能会丢失第一个字节

USART_SendData(USART1, *(ptrdata++)); //触发TC中断

}


//中断服务函数中的部分代码

if(USART_GetITStatus(DEBUG_USARTx,USART_IT_TC)!=RESET)

{

if((*ptrdata)=='')

USART_ClearFlag(USART1, USART_FLAG_TC);

else

{

USART_SendData(DEBUG_USARTx,*ptrdata++);

}

}


参考的那些博客不太看得懂,调试的结果也比较神奇。。。暂且先这样吧,能用就行。。。

关键字:STM32  中断方式  发送数据 引用地址:STM32学习——中断方式下的发送数据

上一篇:STM32学习——ADC采集
下一篇:STM32学习——USART收发数据

推荐阅读最新更新时间:2024-11-12 18:16

基于STM32的TL431小电流输出电路
  TL431是一种并联稳压集成电路。因其性能好、价格低,因此广泛应用在各种电源电路中。其封装形式与塑封三极管9013等相同,如图a所示。同类产品还有图b所示的双直插外形的。封装形式:TO - 92、SOT - 89、SOT - 23      在STM32单片机系统中,100脚以下没有外接出VREF引脚,但这样使得DAC的参考端和VCC共用,带来较大误码差,为解决这一问题,可以使用廉价的TL431来解决供电问题,TL431典型温漂为30ppm,所以在一般应用中已非常足够。选用两只低温漂电阻,调整输出使TL431的输出电压在3V-3.6V之间,它的并联稳压电流可达到30mA,正好能满足一般STM32核心的功耗需求。   利用TL
[单片机]
基于<font color='red'>STM32</font>的TL431小电流输出电路
STM32的MDK工程建立
折腾了两天,终于了解了整个固件库工程里的结构,把整个流程记录下来以备以后查看 1、在MDK中建立一个新工程,指派芯片 2、添加启动文件,位于..\STM32F10x_StdPeriph_Lib_V3.2.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm中。 注:这里使用的是MDK,如果使用其他编译工具GNU或IAR可在对应文件夹下找到 3、添加STM32F10x_StdPeriph_Lib_V3.2.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c及\STM32
[单片机]
STM32 使用DMA+DAC+TIMER 输出正弦波
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁。在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道。建立这个通道的好处是:可以抛开CPU,不占用CPU的资源,直接使用这块内存的内容,速度也会加快。 DAC:STM32F103中有两个DAC,可以同时使用。DAC的作用就是将数字量转化为模拟量(电压),在这就不作太多的讲解。 TIMER:定时器。不作讲解。 那么对于使用DMA+DAC+TIMER产生正弦波的原理或过程,我有这样一个简单的理解:   先将一个可以生成正弦波的数据表保存在静态内存中,然后在DAC以及这块内存中间使用DMA建立一个通道,经过以上
[单片机]
STM32怎么烧录程序
STM32烧录程序目前笔者知道的有三种:JLink ,Ulink和串口烧录,使用工具分别为:JLink,ULink以及USB转TTL线。 ULink 烧录程序 在安装MDK过程中,会有提示是否安装驱动,该驱动就为ULink驱动,如果选择是就不需要再安装驱动了,否则就需要自己手动下载驱动并安装,驱动安装完毕之后我们需要告诉我们的MDK我们使用的是什么烧录工具,右键Target目录选择Options for Target…。。,在弹出的Options for target 选项卡中选择Debug选项,在其右上方的下拉框中选择ULink/ME Cortex Debugger 即是选择了ULink进行程序烧录。 这里需要注意的是
[单片机]
<font color='red'>STM32</font>怎么烧录程序
STM32串口的部分映射与完全映射
以stm32的USART1来举例 默认使用的是PA9为TX,PA10为RX,当需要开启复用功能时,需要注意修改以下几个地方的代码 1 时钟的开启 当使用复用功能后,就需要开启复用时钟RCC_APB2Periph_AFIO 2 初始化引脚的不同,原来的是PA9,PA10,但是现在要初始化PB6,PB7,这一部分就不贴代码了。 3 调用GPIO_PinRemapConfig()函数 GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); USART1的重映射开启 注意:GPIO_PinRemapConfig()函数的参数是不能随便写的
[单片机]
<font color='red'>STM32</font>串口的部分映射与完全映射
STM32使用外部16MHZ晶振总结
做小封装产品设计的朋友或许知道3225-4PIN的晶振,为何8MHZ晶振批量价格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因为3225封装的晶振目前全球最低频率一般为8MHZ,而国内8MHZ达不到精度指标,所以市场上的8MHZ晶振一般为进口晶振,因此成本被垄断。 图1 3225封装晶振 STM32单片机学习者一开始用的晶振一般是2PIN的8MHZ晶振,一旦正真做产品研发的时候,使用到3225的8MHZ晶振的话,成本是个不小的挑战。笔者现针对这个问题,提出使用16MHZ晶振代替的方法。 图2 STM32时钟树状图 由上图可以看出,如果想兼容8MHZ晶振,必须在时钟倍频前2分频。程序设计如
[单片机]
<font color='red'>STM32</font>使用外部16MHZ晶振总结
单片机入门学习八 STM32单片机学习五 时钟系统
单片机学习除了了解该篇 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础 中的基础外,我们还需要有时钟的概念,本篇将记录 stm32的时钟系统。 1、STM32时钟介绍 下面这幅图时stm32的时钟系统框图 1)蓝底框表示 时钟源,即: ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。(WDG看门狗 使用该时钟源) ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。(RTC实时时钟 使用该时钟源) ⑤PLL为锁相环
[单片机]
单片机入门学习八 <font color='red'>STM32</font>单片机学习五 时钟系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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