STM32 CUBEMX UART+DMA

发布者:火箭少年最新更新时间:2020-04-17 来源: eefocus关键字:STM32  CUBEMX  UART  DMA 手机看文章 扫描二维码
随时随地手机看文章

参考

https://blog.csdn.net/xukao5671927/article/details/78605022

http://www.51hei.com/bbs/dpj-39885-1.html

官方参考手册


小发现:

USART1_IRQHandler中的


void USART1_IRQHandler(void)

{

  /* USER CODE BEGIN USART1_IRQn 0 */

    uint32_t tmp_flag = 0;

    uint32_t temp;

  /* USER CODE END USART1_IRQn 0 */    

  HAL_UART_IRQHandler(&huart1);

  /* USER CODE BEGIN USART1_IRQn 1 */

    tmp_flag =  __HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE);

    if((tmp_flag != RESET)){


        __HAL_UART_CLEAR_IDLEFLAG(&huart1);


        /* 读取串口状态寄存器(芯片型号不同,寄存器名称可能需要修改) */

        temp = huart1.Instance->SR;

        /* 读取串口数据寄存器(芯片型号不同,寄存器名称可能需要修改) */

        temp = huart1.Instance->DR;

        HAL_UART_DMAStop(&huart1);

        /* 读取DMA剩余传输数量(芯片型号不同,寄存器名称可能需要修改) */

        temp  = hdma_usart1_rx.Instance->NDTR;

        rx_len =  BUFFER_SIZE - temp;

        recv_end_flag = 1;

    }

  /* USER CODE END USART1_IRQn 1 */

}


__HAL_UART_CLEAR_IDLEFLAG(&huart1);是这样一个宏函数


     #define __HAL_UART_CLEAR_PEFLAG(__HANDLE__)     

         do{                                           

        __IO uint32_t tmpreg = 0x00U;               

    tmpreg = (__HANDLE__)->Instance->SR;       

    tmpreg = (__HANDLE__)->Instance->DR;       

    UNUSED(tmpreg);                             

    } while(0U)



/* 读取串口状态寄存器(芯片型号不同,寄存器名称可能需要修改) */

temp = huart1.Instance->SR;

/* 读取串口数据寄存器(芯片型号不同,寄存器名称可能需要修改) */

temp = huart1.Instance->DR;


功能相同,故将函数注释掉。重新烧录,程序正常运行

关键字:STM32  CUBEMX  UART  DMA 引用地址:STM32 CUBEMX UART+DMA

上一篇:几种STM32开发IDE的比较与选择
下一篇:STM32应用-5-LORA模块测试

推荐阅读最新更新时间:2024-11-13 12:22

STM32之NVIC知识讲解
我们先来看一下Reference Datasheet中是如何说的: SCB- AIRCR中目前只用到4位,也就是最高能有16级中断嵌套,如果全使用的话可以达到256级 选用优先级分组(实际就是选几位用于主优先级几位用于辅优先级) 注意,我们在一个工程中只能用一种分组方式 The table below gives the allowed values of the pre-emption priority and subpriority according to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig fun
[单片机]
<font color='red'>STM32</font>之NVIC知识讲解
STM32学习之路-中断优先级
优先级的问题可以分为以下情况: 抢占优先级和响应优先级 (1)抢占优先级高的可以打断抢占优先级低的,形成嵌套. (2)抢占优先级相同时,看响应优先级.如果两个中断前后发生的话,后来的中断不能打断前一个中断 只能等,如果两个中断同时发生的话,则响应优先级高的先响应. (3)抢占级别和响应级别都一样时,按照中断的地址来响应,地址低的先响应 这样就解决了优先级的问题. 哪个级别高呢? 0 1 2 ...... STM32共有5组分别是0-4组,还是借那个图 可以看到第4组所有的位都用来设置抢占式优先级了(占先式),所以它能嵌套15个中断,然后自身一个中断,一次类推 0组只有响应式优先级,所以它不能
[单片机]
<font color='red'>STM32</font>学习之路-中断优先级<NIVC(2)>
STM32 ADC转换(DMA
上次博客已经讲了如何实现ADC转换。这次我使用DMA来帮助ADC的转换。用DMA的话,可以实现多路ADC通道同时转化了。 下面就讲讲怎么借助DMA实现DAC的多路转换。还是基于我自己的规范工程。 1、工程的修改 1)由于要使用ADC功能,必须使用到库文件stm32f10x_adc.c,所以将是stm32f10x_adc.c文件添加到STM32F10x_StdPeriod_Driver工程组中。 2)这次需要使用DMA功能,所以还要讲stm32f10x_dma.c文件添加到STM32F10x_StdPeriod_Driver工程组中. 3)打开stm32f10x_conf.h文件,将原先屏蔽的:#include stm32f
[单片机]
<font color='red'>STM32</font> ADC转换(<font color='red'>DMA</font>)
STM32的PWM的频率和占空比设定
在TEC控温项目中用到PWM的占空比来控制温度,这就需要占空比是连续可以变化的。 最开始也是到处找资料,找现成的例程,发现大家各说风云,最后还是没有建设性的结果。所以又请教了官方的固件库“STM32最新固件库v3.5”(存到百度网盘- 开发应用- stm32目录下了)呵呵,有现成的demo。开始好像是懂了也没有过多的去研究,也没有备份,就没去管他了。后来具体用的时候发现没有想象的那么简单,又倒腾了好久才搞清楚,问了不走弯路。这次决定用博客来记录一下现在的成果。配置文件如下: void TIME_ini(uint16_t Channel4Pulseset) { TIM_TimeBaseInitTypeDef TIM_Time
[单片机]
STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 STM32CubeMX创建PWM例程 HAL库定时器PWM函数库 PWM创建呼吸灯 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32<font color='red'>CubeMX</font>教程七---PWM输出(呼吸灯)
stm32和电机开发(上位系统)
电机本身的开发一般都是用PID或者FOC完成的。但是,作为一个系统来说,在stm32之前,一般还会有一个主机系统,这个主机系统一般跑linux系统或者是windows系统。如果是linux系统,那么一般是各种各样的soc;如果是windows系统,一般就是pc电脑了。 为了说明电机控制系统和上层是怎么交互的,我们可以拿写字机做一个说明。写字机一般是拿pc当作主机进行处理,对图像进行预处理后,生成一条一条的控制命令。这些命令,通过串口发送给stm32,经过串口解析、插值、速度规划、x/y/z控制之后,就可以把对应的图像通过笔的书写打印出来。类似的方法还可以用于雕刻、3d打印等场合。 有了上面的说明,我
[单片机]
<font color='red'>stm32</font>和电机开发(上位系统)
STM32,RTC周期性唤醒(wakeup)中断
STM32L151: int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); LED_ON(); MX_DMA_Init(); MX_SPI1_Init(); MX_SPI2_Init(); MX_TIM3_Init(); MX_USART2_UART_Init(); //MX_IWDG_Init(); MX_RTC_Init(); MX_USART3_UART_Init(); MX_USART1_UART_Init(); printf( init complete...\r\n ); LED_OFF(); uns
[单片机]
STM32系列MCU解决方案展示
  STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成多个不同的系列,满足不同应用的不同需求。由于STM32系列在开发工具的成本和广泛度;存储器的种类、规模、性能和容量;以及各种软件获得的难易度方面都做了非常出色的准备,因此迅速在市场上取得巨大成功,成为最受欢迎的工业及消费市场应用的MCU产品系列之一。   STM32系列 E-METER产品方案介绍   友尚集团   与传统的机械式电能表相比,eMeter能够更快、更便宜、更可靠地报告用电量。友尚推出ST于智能电表上的运用方案,整个方案中的架构主要包括计量芯片、MCU和外围芯片三个部分。   计量芯片   单相表
[单片机]
<font color='red'>STM32</font>系列MCU解决方案展示
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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