stm32的rxne和idle中断_HAL库的STM32F767的DMA通过IDLE中断接收数据但不能访问

news/2024/7/5 2:45:09

仿真能看到接收缓冲区数组中的数据,但不能访问,如果不访问,再开启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);

}

699ba7046c51816a17b33a7caa85f179.png

0

97b4b3417991aabde46fdac613e34292.png


http://lihuaxi.xjx100.cn/news/236476.html

相关文章

CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法

300px!important;width /**/:340px;margin:0 10px 0 10px} &#xff0c;关于这个/**/是什么我也不太明白&#xff0c;只知道IE5和firefox都支持但IE6不支持&#xff0c;如果有人理解的话&#xff0c;请告诉我一声&#xff0c;谢了&#xff01;&#xff1a;&#xff09; 3、ul标…

看看Vector源码Java 9

2019独角兽企业重金招聘Python工程师标准>>> Vector类实现了一个可增长的对象数组。像数组一样&#xff0c;它包含可以使用整数索引随机访问。但是&#xff0c;Vector的大小可以根据需要增大或缩小&#xff0c;以适应在创建Vector之后添加和删除项目。 文档里的内容…

安卓手机格式化怎么弄_安卓手机无法启动如何进行格式化

当我们在使用安卓智能手机的时候&#xff0c;由于使用错误或者出现的各种问题导致手机无法重启&#xff0c;相信你一定会感到很烦恼&#xff01;而如果手机混乱到无法启动&#xff0c;格式化是一个不错的尝试方法&#xff01;下面给大家介绍手机格式化的方法和注意事项&#xf…

PreparedStatement

该 PreparedStatement接口继承Statement&#xff0c;并与之在两方面有所不同&#xff1a;  PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指…

java pgp加密_Java PGP加密解密实例教程详细操作步骤

本文将一步步告诉大家PGP的使用步骤&#xff0c;看完大家就立马可以在项目及工作环境中使用起来&#xff0c;so easy!!!1&#xff0c;首先了解什么是PGP&#xff0c;PGP的工作原理是什么&#xff1f;这个直接百度百科&#xff0c;我不啰嗦。PGP是英文Pretty Good Privacy(更好地…

浅谈网络协议(四) IP的由来--DHCP与PXE

2019独角兽企业重金招聘Python工程师标准>>> 上一节说过&#xff0c;IP就是一台计算机的通讯地址&#xff0c;要和其他机器通讯&#xff0c;就需要一个通讯地址&#xff0c;就要给网卡配置这么一个地址。 配置 IP 那如何配置呢&#xff1f;可以使用 ifconfig&#x…

谈谈对BPM的理解

BPM的产生缘由 近年来&#xff0c;随着计算机技术的发展和互联网时代的到来&#xff0c;我们已经进入了信息时代&#xff0c;也称为数字化时代&#xff0c;在这数字化的时代里&#xff0c;企业的经营管理都受到了极大的挑战。从上世纪90年代起至今&#xff0c;企业的信息化工作…

java画蝴蝶_怎样用java语言编写蝴蝶结

展开全部按照你的要求编写的Java程序如下:(蝴蝶结形九62616964757a686964616fe58685e5aeb931333335336436九乘法表)public class GG {public static void main(String[] args) {for(int i1;i<9;i){for(int j1;j<i;j){System.out.print(i"*"j""i*j&qu…