stm32的rxne和idle中断_HAL库的STM32F767的DMA通过IDLE中断接收数据但不能访问
仿真能看到接收缓冲区数组中的数据,但不能访问,如果不访问,再开启DMA接收能正常接收,并且在仿真状态下也能查看。只要访问一次这个数组,下一次开启DMA接收后就不能接收数据了。
原代码如下:
if(rx_end == 1){
rx_end = 0;
HAL_UART_DMAStop(&UART1_Handler);
LCD_ShowString(300, 400, 200, 16, 16, "success!");
LCD_ShowString(230, 400, 200, 16, 16, aRxBuffer); //这条不能执行,执行就不能再接收数据
//屏蔽掉这条在仿真状态下能观察aRxBuffer接收正常
HAL_UART_Receive_DMA(&UART1_Handler, aRxBuffer, RXBUFFERSIZE);
}
配置原代码如下:
{
__HAL_RCC_DMA2_CLK_ENABLE(); //DMA2ʱÖÓʹÄÜ
__HAL_RCC_GPIOA_CLK_ENABLE(); //ʹÄÜGPIOAʱÖÓ
__HAL_RCC_USART1_CLK_ENABLE(); //ʹÄÜUSART1ʱÖÓ
GPIO_Initure.Pin=GPIO_PIN_9; //PA9
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //¸´ÓÃÍÆÍìÊä³ö
GPIO_Initure.Pull=GPIO_PULLUP; //ÉÏÀ
GPIO_Initure.Speed=GPIO_SPEED_FAST; //¸ßËÙ
GPIO_Initure.Alternate=GPIO_AF7_USART1; //¸´ÓÃΪUSART1
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //³õʼ»¯PA9
GPIO_Initure.Pin=GPIO_PIN_10; //PA10
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //³õʼ»¯PA10
UART1_Handler.Instance=USART1; //USART1
UART1_Handler.Init.BaudRate=9600; //²¨ÌØÂÊ
UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B; //×Ö³¤Îª8λÊý¾Ý¸ñʽ
UART1_Handler.Init.StopBits=UART_STOPBITS_1; //Ò»¸öֹͣλ
UART1_Handler.Init.Parity=UART_PARITY_NONE; //ÎÞÆæżУÑéλ
UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //ÎÞÓ²¼þÁ÷¿Ø
UART1_Handler.Init.Mode=UART_MODE_TX_RX; //ÊÕ·¢Ä£Ê½
HAL_UART_Init(&UART1_Handler); //HAL_UART_Init()»áʹÄÜUART1
//Tx DMAÅäÖÃ
UART1TxDMA_Handler.Instance = DMA2_Stream7; //Êý¾ÝÁ÷Ñ¡Ôñ
UART1TxDMA_Handler.Init.Channel = DMA_CHANNEL_4; //ͨµÀÑ¡Ôñ
UART1TxDMA_Handler.Init.Direction = DMA_MEMORY_TO_PERIPH; //´æ´¢Æ÷µ½ÍâÉè
UART1TxDMA_Handler.Init.PeriphInc = DMA_PINC_DISABLE; //ÍâÉè·ÇÔöÁ¿Ä£Ê½
UART1TxDMA_Handler.Init.MemInc = DMA_MINC_ENABLE; //´æ´¢Æ÷ÔöÁ¿Ä£Ê½
UART1TxDMA_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; //ÍâÉèÊý¾Ý³¤¶È:8λ
UART1TxDMA_Handler.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; //´æ´¢Æ÷Êý¾Ý³¤¶È:8λ
UART1TxDMA_Handler.Init.Mode = DMA_NORMAL; //ÍâÉèÁ÷¿Øģʽ
UART1TxDMA_Handler.Init.Priority = DMA_PRIORITY_MEDIUM; //ÖеÈÓÅÏȼ¶
UART1TxDMA_Handler.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
UART1TxDMA_Handler.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
UART1TxDMA_Handler.Init.Memburst = DMA_MBURST_SINGLE; //´æ´¢Æ÷Í»·¢µ¥´Î´«Êä
UART1TxDMA_Handler.Init.PeriphBurst = DMA_PBURST_SINGLE; //ÍâÉèÍ»·¢µ¥´Î´«Êä
// HAL_DMA_DeInit(&UART1TxDMA_Handler);
HAL_DMA_Init(&UART1TxDMA_Handler);
__HAL_LINKDMA(&UART1_Handler, hdmatx, UART1TxDMA_Handler);
//Rx DMAÅäÖÃ
UART1RxDMA_Handler.Instance = DMA2_Stream2; //Êý¾ÝÁ÷Ñ¡Ôñ
UART1RxDMA_Handler.Init.Channel = DMA_CHANNEL_4; //ͨµÀÑ¡Ôñ
UART1RxDMA_Handler.Init.Direction = DMA_PERIPH_TO_MEMORY; //´æ´¢Æ÷µ½ÍâÉè
UART1RxDMA_Handler.Init.PeriphInc = DMA_PINC_DISABLE; //ÍâÉè·ÇÔöÁ¿Ä£Ê½
UART1RxDMA_Handler.Init.MemInc = DMA_MINC_ENABLE; //´æ´¢Æ÷ÔöÁ¿Ä£Ê½
UART1RxDMA_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; //ÍâÉèÊý¾Ý³¤¶È:8λ
UART1RxDMA_Handler.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; //´æ´¢Æ÷Êý¾Ý³¤¶È:8λ
UART1RxDMA_Handler.Init.Mode = DMA_NORMAL; //ÍâÉèÁ÷¿Øģʽ
UART1RxDMA_Handler.Init.Priority = DMA_PRIORITY_MEDIUM; //ÖеÈÓÅÏȼ¶
UART1RxDMA_Handler.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
UART1RxDMA_Handler.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
UART1RxDMA_Handler.Init.MemBurst = DMA_MBURST_SINGLE; //´æ´¢Æ÷Í»·¢µ¥´Î´«Êä
UART1RxDMA_Handler.Init.PeriphBurst = DMA_PBURST_SINGLE; //ÍâÉèÍ»·¢µ¥´Î´«Êä
HAL_DMA_Init(&UART1RxDMA_Handler);
__HAL_LINKDMA(&UART1_Handler, hdmarx, UART1RxDMA_Handler);
__HAL_UART_CLEAR_IDLEFLAG(&UART1_Handler);
__HAL_UART_ENABLE_IT(&UART1_Handler, UART_IT_RXNE); //¿ªÆô½ÓÊÕÖжÏ
HAL_NVIC_EnableIRQ(USART1_IRQn); //ʹÄÜUSART1ÖжÏͨµÀ
HAL_NVIC_SetPriority(USART1_IRQn, 3, 3); //ÇÀÕ¼ÓÅÏȼ¶3£¬×ÓÓÅÏȼ¶3
HAL_UART_Receive_DMA(&UART1_Handler, aRxBuffer, RXBUFFERSIZE); //开启了一次
}
接收中断函数
void USART1_IRQHandler(void)
{
unsigned short y;
if((__HAL_UART_GET_FLAG(&UART1_Handler, UART_IT_RXNE) != RESET))
{
y = 400;
LCD_ShowString(30, y, 200, 16, 16, "UART_IT_RXNE");
LCD_ShowNum(180, y, RX_ADDR, 3, 16);
rx_end = 1;
if(RX_ADDR < 900){
RX_ADDR++;
}
else{
RX_ADDR = 0;
}
}
HAL_UART_IRQHandler(&UART1_Handler);
}
0
stm32的rxne和idle中断_HAL库的STM32F767的DMA通过IDLE中断接收数据但不能访问相关推荐
- 1、HAL库UART 中断|DMA 自动回显接收数据
1.实现代码: stm32f4xx_hal_conf.h文件开启UART宏定义 #define HAL_UART_MODULE_ENABLED 添加stm32f4xx_hal_uart.c和stm32 ...
- 使用STM32Cube MX为STM32 CAN总线快速配置上手教程_HAL库_CAN协议_STM32_附波特率计算工具
使用STM32Cube MX为STM32 CAN总线快速上手教程_HAL库_CAN协议_STM32 前言 博主也是刚接触CAN协议的新手,如有不对的地方欢迎交流 本文旨在使用STM32Cube MX快 ...
- stm32的rxne和idle中断_STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
历程详解 详解包括: 中断原理讲解 例程流程详解 库函数分析详解 对应寄存器介绍 对应函数介绍 对应注释详解 本篇文章提供两种方法: 一种是 :IDLE 接收空闲中断+DMA 一种是: IDLE 接收 ...
- 【STM32标准库】【基础知识】外部中断
文章目录 外部中断 什么是外部中断 外部中断的触发 上升沿触发 下降沿触发 上升下降沿触发 外部中断初始化 初始化思路 1.初始化GPIO 2. 打开时钟 3.GPIO和外部中断的连接 4.外部中断初 ...
- STM32从零到一,从标准库移植到HAL库,UART串口1以DMA模式收发不定长数据代码详解+常见问题 一文解析
前言 本文的参考资料 感谢提供标准库版本的CSDN同学:这两篇文章至少是我看过的最详细的标准库配置DMA版本.而且代码实测稳定能用. STM32 | DMA配置和使用如此简单(超详细)_...| .. ...
- 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1.芯片: STM32F407ZET6/ STM32F103ZET6 ...
- stm32F051 HAL库+DMA+串口空闲中断
STM32CubeMX 配置实现参考这里. 1. 串口空闲中断 1.1 UART_DMA方式接收数据 STM32串口使用DMA方式接收数据可以减小CPU的开销. 对于接收定长数据,可以将DMA接收缓冲 ...
- 【STM32-I2C学习总结】STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC
STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC 一 .I2C物理层 二.协议层 1.I2C基本读写过程 (1)主机写数据到从机 (2)主机由从机中读数据 (3)I2C 通讯复合 ...
- 【STM32】CubeMX+HAL库之 硬件IIC+DMA控制OLED(兼容SSD1306SH1106驱动)
[STM32]CubeMX+HAL库之 硬件IIC+DMA控制1.3寸OLED 前言 目前网上大多数驱动OLED屏都采用软件IIC,因为HAL库的升级使得硬件IIC的稳定性得到了保障,所以想采用硬件I ...
最新文章
- python创建excel图表_python使用VBA(8):Excel创建图表(简单)
- 简练软考知识点整理-项目合同的类型
- @echo off是什么意思_为什么执行自己的程序要在前面加./
- ARM开发板上iconv调用失败的解决方法
- 手机充电器5V=1A和5V=2A的区别是什么?能通用吗?
- 你的旧船票能否搭上这艘巨轮?——解读近5年大数据产业发展规划
- Vue3 组合式Api之customRef实现防抖功能
- Interesting Finds: 2008.01.25
- Rstudio 1.2 新功能介绍
- SpringMVC学习(六)处理乱码问题
- 递归算法经典实例python-递归案例python
- Mac 安装和配置 Maven
- 三星note9刷Android9,【极光ROM】-【三星NOTE9 N960X-9810】-【V21.0 Android-Q-THB】
- 斐讯 http文件服务器,斐讯刷机教程(硬件版本A5)
- 第十二周 项目一--图基本算法库
- 激光清洗铝合金氧化层的优势
- Microsoft Word2010 中设置和取消英文首字母大写
- Windows 端口代理配置(Netsh)
- 解决无法从公司 Maven 私服下载依赖的问题
- NX安装cuda和cudnn
热门文章
- 【java】快速复制数组方法arraycopy的使用
- Window对象中setInterval()和setTimeout()的区别
- CSS之定位(元素的层级z-index)
- “抽象类”的定义及其与“普通类”的区别
- mysql 按日期删除数据库_DAY11 - MySQL入门(数据库的增、删、改、查 基本操作)...
- 商品秒杀,防并发解决思路
- ubuntu 下mysql导入出.sql文件
- 普华永道重磅报告:决定未来的八大核心科技
- 硬铺路、软筑墙:三星移动在中国的新路径
- shell编程基础(2)---与||