当前位置: 首页 > news >正文

苏州网站建设运营推广网络营销平台有哪些特点

苏州网站建设运营推广,网络营销平台有哪些特点,网站开发 界面,个人摄影网站源码一、概述 在一些一次性接收大批量数据的引用场合,如果使用接收中断会频繁的进入接收中断影响代码的运行效率。为了解决这个问题可以使用串口的空闲中断DMA实现。 二、应用 在网上招了一些例程在STM32F407的平台上都没有跑通会出现各种异常,主要原因还…

一、概述

在一些一次性接收大批量数据的引用场合,如果使用接收中断会频繁的进入接收中断影响代码的运行效率。为了解决这个问题可以使用串口的空闲中断+DMA实现。

二、应用

在网上招了一些例程在STM32F407的平台上都没有跑通会出现各种异常,主要原因还是库的版本有更新可能和当前的工程不匹配,经过几天的煎熬终于调通了流程。

三、代码实现

1、初始化程序

void USART3_Init(uint32_t baudrate)
{/* IO 及 时钟配置 */USART3_TX_GPIO_CLK_ENABLE(); /* 使能 串口TX脚 时钟 */USART3_RX_GPIO_CLK_ENABLE(); /* 使能 串口RX脚 时钟 */USART3_CLK_ENABLE();      /* 使能 串口 时钟 */GPIO_InitTypeDef gpio_init_struct;gpio_init_struct.Pin = USART3_TX_GPIO_PIN;gpio_init_struct.Mode = GPIO_MODE_AF_PP;gpio_init_struct.Pull = GPIO_PULLUP;gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;gpio_init_struct.Alternate = USART3_TX_GPIO_AF;              /* 复用为串口 */HAL_GPIO_Init(USART3_TX_GPIO_PORT, &gpio_init_struct); /* 串口TX 脚 模式设置 *///gpio_init_struct.Pin = USART3_RX_GPIO_PIN;gpio_init_struct.Alternate = USART3_RX_GPIO_AF;              /* 复用为USART3 */HAL_GPIO_Init(USART3_RX_GPIO_PORT, &gpio_init_struct); /* 串口RX 脚  *//* USART 初始化设置 */USART3_handler.Instance = USART3;                  /* 选择串口屏对应的串口 */USART3_handler.Init.BaudRate = baudrate;               /* 波特率 */USART3_handler.Init.WordLength = UART_WORDLENGTH_8B;   /* 字长为8位数据格式 */USART3_handler.Init.StopBits = UART_STOPBITS_1;        /* 一个停止位 */USART3_handler.Init.Parity = UART_PARITY_NONE;         /* 无奇偶校验位 */USART3_handler.Init.HwFlowCtl = UART_HWCONTROL_NONE;   /* 无硬件流控 */USART3_handler.Init.Mode = UART_MODE_TX_RX;            /* 收发模式 */HAL_UART_Init( &USART3_handler);                       /* 使能对应的串口, 但会调用MSp */
//    __HAL_UART_DISABLE_IT( &USART3_handler, UART_IT_TC);__HAL_UART_ENABLE_IT( &USART3_handler, UART_IT_RXNE);  /* 开启接收中断 */__HAL_UART_ENABLE_IT(&USART3_handler, UART_IT_IDLE);    // 使能串口接收空闲中断HAL_NVIC_SetPriority(USART3_IRQn, 3, 3);              /* 抢占优先级3,子优先级3 */HAL_NVIC_EnableIRQ(USART3_IRQn);                      /* 使能USART1中断 */	__HAL_RCC_DMA1_CLK_ENABLE();// 低优先级
//    __HAL_LINKDMA(&USART3_handler, hdmatx, g_dma_handle);   /* 将DMA与USART3联系起来(发送DMA) */	 
__HAL_LINKDMA(&USART3_handler, hdmarx, g_dma_handle); g_dma_handle.Instance = DMA1_Stream1;                    /* 数据流选择 */g_dma_handle.Init.Channel = DMA_CHANNEL_4;                               /* DMA通道选择 */g_dma_handle.Init.Direction = DMA_PERIPH_TO_MEMORY;           /* 外设到存储器 */g_dma_handle.Init.PeriphInc = DMA_PINC_DISABLE;               /* 外设非增量模式 */g_dma_handle.Init.MemInc = DMA_MINC_ENABLE;                   /* 存储器增量模式 */g_dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;  /* 外设数据长度:8位 */g_dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;     /* 存储器数据长度:8位 */g_dma_handle.Init.Mode = DMA_NORMAL;                          /* 外设流控模式 */g_dma_handle.Init.Priority = DMA_PRIORITY_MEDIUM;             /* 中等优先级 */g_dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;            /* 关闭FIFO模式 */g_dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;    /* FIFO阈值配置 */g_dma_handle.Init.MemBurst = DMA_MBURST_SINGLE;               /* 存储器突发单次传输 */g_dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE;            /* 外设突发单次传输 */	
//	  HAL_DMA_Init(&g_dma_handle);                          // 将DMA与USART3联系起来(接收DMA)HAL_UART_Receive_DMA(&USART3_handler, g_rcvDataBuf, MAX_BUF_SIZE);             // 开启DMA接收HAL_DMA_Start(&g_dma_handle,(uint32_t)&USART3->DR,(uint32_t)&g_rcvDataBuf,MAX_BUF_SIZE);}

2、中断处理

void USART3_IRQHandler(void)
{
//     printf("t");uint8_t res;uint16_t PACKET_DATA_LEN;uint16_t t;__HAL_UNLOCK( &USART3_handler);//    if ((__HAL_UART_GET_FLAG( &USART3_handler, UART_FLAG_RXNE) != RESET)) /* 接收到数据 */
//    {
//        HAL_UART_Receive( &USART3_handler, &res, 1, 1000);Buffer_Push( &RF_Buffer, res); //接收数据,
//        		printf("%c",res);
//    }	if (__HAL_UART_GET_FLAG(&USART3_handler, UART_FLAG_IDLE) != RESET)                 // 获取接收IDLE标志位是否被置位{   printf("进入空闲中断 !\r\n");          __HAL_UART_CLEAR_IDLEFLAG(&USART3_handler); 
//		HAL_UART_DMAStop(&USART3_handler); 	  /* 异常 */	HAL_DMA_Abort(&g_dma_handle);PACKET_DATA_LEN = (MAX_BUF_SIZE - __HAL_DMA_GET_COUNTER(&g_dma_handle));t=__HAL_DMA_GET_COUNTER(&g_dma_handle);	printf("使用存储空间:%d 剩余存储空间:%d\r\n",PACKET_DATA_LEN,t);printf("接收到的数据:%s",g_rcvDataBuf);HAL_UART_Receive_DMA(&USART3_handler, (uint8_t *)g_rcvDataBuf, MAX_BUF_SIZE);  HAL_DMA_Start(&g_dma_handle,(uint32_t)&USART3->DR,(uint32_t)&g_rcvDataBuf,MAX_BUF_SIZE);// 重新开启DMA传输memset(g_rcvDataBuf, 0, sizeof(g_rcvDataBuf));}}

3、测试结果

4、源码链接

STM32F407基于串口空闲中断和DMA的实现可以实现大批量数据的接收资源-CSDN文库

http://www.yayakq.cn/news/227069/

相关文章:

  • 写网站建设需求文档爱网之家下载
  • 网站风险怎么解决方案wordpress 左导航
  • 昆明集团网站建设90设计怎么免费下载
  • 达州科创网站建设公司网站建设报价选兴田德润
  • 上海网站推广排名软件界面设计要求
  • 无锡网络科技有限公司网站优化需要工具
  • 合肥网站制作网站最近网站改版文章突然不收录
  • 虚拟机主机网站建设的几个步骤wordpress博客空间
  • 北海 网站建设 公司中国工程有限公司
  • 壹财富 网站开发怎么查在哪个网站做的备案
  • 房产类网站制作商网上购物网站开发
  • 如何做属于自己的网站东莞市建设企业网站企业
  • 阿里巴巴国际站可以做网站吗视频拍摄教程
  • 中小企业网站开发韵茵网站怎么做下拉刷新页面数据
  • 中国建设劳动学会监制网站seo优化sem推广
  • 公司网站开发费用兴田德润官方网站微信小程序开发工具教程
  • 自己做抽奖网站违法吗宣化网站建设
  • 做宣传海报的网站重庆网站建设优化排名
  • 光之翼可以做网站吗平台网站 备案吗
  • 做电商网站有什语言好东莞企业网站建立报价
  • 华为云建设网站需要域名吗wordpress update ftp
  • 打开百度竞价页面是网站是什么做新闻封面的网站
  • 网站公司优势上海猎头公司排名
  • 政务公开 网站建设移动网站设计
  • 硅谷主角刚开始做的是软件还是网站建设网站套餐
  • wordpress 目录排序广东seo推广贵不贵
  • 怎么做网站的浏览量统计太原网站seo顾问
  • 自己做的网站出现广告郑州做网站元辰
  • 旭泽建站有漏洞的网站
  • 专业的营销网站建设公司排名wordpress按钮编辑器