STM32 CubeMX 利用设置串口UART采用DMA接收

一、踩过的坑

1、CubeMX 生成工程的时候询问是否升级固件F103的1.61版本库,可以直接忽略,选择本地已经安装的1.60。否则不会导入HAL库到工程中。

2、产生代码的最后一步,选择对每个外设分别生成.c/.h文件,项目结构更清晰。

3、要启用下载的话必须在Pinout页面选择PA13和PA14,为调试接口,以STM32F103RB为例。

4、接口配置Configuration 中选择SYS,启用DEBUG为Serial Wire,时基选择SysTick. (1ms)。

5、要使用RTC的话,需要选择RCC 外部低速时钟LSE为:Crystal.

6、创建好工程需要对项目进行设置,配置调试和下载SW,选择为J-Link/J-Trace Cortex, Port为SW, FlashDownload 选上Reset and Run.

7、CUBEMX的串口数据位数包括校验位,有校验在8位位宽的时候数据设置为9,无校验设置为8.

8、生成工程中需要增加以下代码:

(1)stm32f1xx_it.c 在对应的USART1_IRQHandler添加中断入口USART1_ReceiveIDLE();

(2)usart.c 中完成USART1_ReceiveIDLE():

     uint32_t temp;  

    if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) != RESET))  

    {

      __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_IDLE);

        temp = huart1.Instance->SR;

        temp = huart1.Instance->DR;            

        HAL_UART_DMAStop(&huart1);  

        temp = huart1.hdmarx->Instance->CNDTR;  

        Usart1_RX.rx_len =  UART1_BUFF_SIZE - temp;   

        Usart1_RX.receive_flag=1;  

        HAL_UART_Receive_DMA(&huart1,Usart1_RX.RX_Buf,UART1_BUFF_SIZE);                  

    }     

(3)usart.c中添加void USART1_ClearIT()主要是启用  HAL_UART_Receive_DMA和 __HAL_UART_ENABLE_IT。

{

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_PE);

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_TXE);

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_TC);

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_RXNE);

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_LBD);

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_CTS);

    __HAL_UART_DISABLE_IT(&huart1,UART_IT_ERR);

    

    __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_IDLE);                 

        HAL_Delay(10);

    __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_TC);                  

      HAL_UART_Receive_DMA(&huart1, Usart1_RX.RX_Buf, UART1_BUFF_SIZE); 

  __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);                 

}

(4)在Main.c中 启用接收中断,调用void USART1_ClearIT()。然后就可以通过Usart1_RX.receive_flag和 Usart1_RX.rx_len来处理数据了。

记录于【2018-11-6】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle锁表怎么解决,Oracle锁表问题的简捷处理技巧

在开发Oracle数据库时,我们常遇到频繁操作的Oracle数据表,会出现Oracle锁表。现在就针对这一问题,提下个人的解决Oracle锁表的技巧。首先问题分析:(1)锁的分析ORACLE里锁有以下几种模式:0:none1&#xff1a…

windows下恢复删除的逻辑分区

From:http://www.cnblogs.com/Spring/archive/2009/09/09/1563062.html 以前E盘分出一部分做过linux的分区,现在E盘空间不够用了,想增加空间,就到磁盘管理中,将之前的linux的逻辑分区删除了,删除后竟然发现整个E盘都没…

MVC PartialView

参考 Updating an MVC Partial View with Ajax RenderPartial vs RenderAction vs Partial vs Action in MVC Razor Adding a Custom Directory to Razor View Engine’s Partial View Locations in ASP.Net MVC3转载于:https://www.cnblogs.com/HQFZ/p/4560827.html

改变自己------每天进步一点点

改变自己------每天进步一点点 前端时间经常在51CTO上写博客,但因为其网站的DNS不稳定,导致很多次需要时都无法访问博客,最后放弃了在51CTO安家的想法,但网站今天说,DNS问题已经解决,所以决定以后就在51CTO…

GB4208中规定的外壳防护等级IP

外壳防护等级IP 经常看到仪器设备的介绍中包括防护等级,例如IP67,IP50等,不同的防护等级到底对应的是什么级别的防护呢,国标GB4208中有明确的规定。现摘录相关的描述,供查看。

如何对linux文件进行编译,linux编译和执行命令都有哪些?该如何实现?

我们知道,Linux是比如手机、平板电脑、路由器、台式计算机计算机设备的核心,它们都使用着Linux系统。以现在来说,一个合格的开发者必须要对Linux有一定的了解,那么,下面就跟小编一起来看看Linux是如何编译及执行的吧。…

如何给虚拟机上的linux系统添加虚拟硬盘

From: http://www.ezloo.com/2008/03/vmware_linux.html 给vmware虚拟机上的linux系统添加一个虚拟硬盘,并对硬盘进行分区、格式化、给分区创建文件系统,实现挂载,自动挂载! 步骤如下:保证你的linux系统处于关闭状态&a…

GB/T 17626 电磁兼容 试验和测量技术系列标准【归纳】

GB/T 17626 电磁兼容 试验和测量技术系列标准包括以下部分: GB/T 17626.1-2006 电磁兼容 试验和测量技术 抗扰度试验总论 GB/T 17626.2-2006 电磁兼容 试验和测量技术 静电放电抗干扰度试验 GB/T 17626.3-2006 电磁兼容 试验和测量技术 射频电磁场辐射抗干扰度试…

linux命令行打开写字板,在Linux操作系统中使用手写板

2009-07-28/14:24手写输入系统的出现拉近了大家与计算机之间的距离,使我们无须苦练输入法。此外,它也是绘画和平面设计爱好者手里的利器。Windows系统下使用手写板已经是司空见惯的事情了,但要在Linux中使用手写板呢?手写板和Linu…

音乐作曲类软件小记

ScordCloud cakewolk band in a box 水果 FL Studio Chordana Composer LogicX Pro转载于:https://www.cnblogs.com/passby/p/4561627.html

linux中fstab文件详解

From:http://www.winu.cn/space-14160-do-blog-id-1105.html 我们在linux中常常用mount命令把硬盘分区或者光盘挂载到文件系统中。/etc/fstab就是在开机引导的时候自动挂载到linux的文件系统。在linux中/etc/fstab的数据项如下所示:/dev/device mountpoint type…

Linux 普通用户和超级用户的切换

ubuntu16环境下。 1、输入su - 2、输入sudo passwd root,修改root密码。 3、切换普通用户 输入 su - jianwang16

winfrom 图片互传

private void button1_Click(object sender, EventArgs e)//从硬盘打开图片显示在窗体里面{OpenFileDialog op new OpenFileDialog();//造一个打开对话框DialogResult dr op.ShowDialog();//将打开对话框显示出来if(drDialogResult.OK) //如果点的是"打开"{FileStre…

linux文件权限报错实例,自定义系统service SELinux权限报错

报错:E SELinux : avc: denied { add } for serviceflashlight pid3485 uid1000 scontextu:r:system_server:s0 tcontextu:object_r:default_android_service:s0 tclassservice_manager permissive1添加权限:android\out\target\product\product-xxx\r…

Silverlight动画制作之From/To/By基本动画

Silverlight动画制作之From/To/By基本动画From/To/By基本动画其中包含了三个最重要的属性:From;To;By。From指的是对象目标属性的起始值,To指的是对象目标属性的结束值,By指的是结束状态相对于起始状态的偏移量。这里我…

NFS配置管理

From: http://www.goooogle.com.cn/Article/NFS-configuration-and-management.aspx 1. NFS概述 NFS即网络文件系统,是主机间通过网络进行文件共享的网络协议,最早由Sun公司提出的,多用于Unix操作系统(Windows中也有相应版本的实现) 。 NFS…