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

网站开发实训总结致谢wordpress删除谷歌自提

网站开发实训总结致谢,wordpress删除谷歌自提,如何介绍自己的网站,门户网站建设项目书在 STM32 开发中,很多人喜欢使用 DMA 来加速串口发送数据。然而,默认的 DMA 往往配合中断或使用循环模式(DMA_CIRCULAR)使用。但在某些特定需求下,我们希望: 使用 DMA_NORMAL 模式,确保 DMA 每次…

在 STM32 开发中,很多人喜欢使用 DMA 来加速串口发送数据。然而,默认的 DMA 往往配合中断或使用循环模式(DMA_CIRCULAR)使用。但在某些特定需求下,我们希望:

  • 使用 DMA_NORMAL 模式,确保 DMA 每次只发送固定长度数据;

  • 不启用任何中断,完全通过轮询实现“自动重发”机制;

  • 实现串口缓冲区数据循环发送;

本文将以 STM32F407 + USART1 + DMA2_Stream7 为例,展示如何实现这个功能。


一、基本原理

  • DMA_NORMAL 模式下,每次发送完成后 EN 位会自动清除;

  • 通过轮询 EN 位是否为 0,可以判断是否传输完成;

  • 判断完成后,手动重新配置 DMA 参数,并重新启动;

  • 整个过程不依赖中断,逻辑清晰、稳定可靠。


二、DMA 和串口初始化

void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;HAL_UART_Init(&huart1);
}void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{GPIO_InitTypeDef GPIO_InitStruct = { 0 };if(huart->Instance == USART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//* Peripheral clock enable */__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO ConfigurationPA9     ------> USART1_TXPA10     ------> USART1_RX*/GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* USART1 DMA Init *//* USART1_RX Init */hdma_usart1_rx.Instance = DMA2_Stream2;hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_usart1_rx.Init.Mode = DMA_NORMAL;hdma_usart1_rx.Init.Priority = DMA_PRIORITY_MEDIUM;hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;if(HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK){Error_Handler();}__HAL_LINKDMA(huart, hdmarx, hdma_usart1_rx);/* USART1_TX Init */hdma_usart1_tx.Instance = DMA2_Stream7;hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4;hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_usart1_tx.Init.Mode = DMA_NORMAL;hdma_usart1_tx.Init.Priority = DMA_PRIORITY_MEDIUM;hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;if(HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK){Error_Handler();}__HAL_LINKDMA(huart, hdmatx, hdma_usart1_tx);}}

三、首次启动 DMA

#define TX_LEN 10
uint8_t uart_send_buffer[TX_LEN] = "Hello DMA";void DMA_UART1_SendStart(void)
{__HAL_DMA_DISABLE(&hdma_usart1_tx);while ((hdma_usart1_tx.Instance->CR & DMA_SxCR_EN) != 0);hdma_usart1_tx.Instance->NDTR = TX_LEN;hdma_usart1_tx.Instance->PAR  = (uint32_t)&USART1->DR;hdma_usart1_tx.Instance->M0AR = (uint32_t)uart_send_buffer;__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_FLAG_TCIF3_7);__HAL_DMA_ENABLE(&hdma_usart1_tx);huart1.Instance->CR3 |= USART_CR3_DMAT;  // 启用 DMA 发送功能
}

四、主循环中实现自动重发

void main(void)
{while (1){if ((hdma_usart1_tx.Instance->CR & DMA_SxCR_EN) == 0){// 修改内容(模拟数据更新)uart_send_buffer[0]++;// 重启 DMAhdma_usart1_tx.Instance->NDTR = TX_LEN;__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_FLAG_TCIF3_7);__HAL_DMA_ENABLE(&hdma_usart1_tx);}}
}

五、总结

这种轮询 + DMA_NORMAL 模式非常适合:

  • 周期性发送固定格式数据;

  • 不想被中断打断主循环的逻辑;

  • 希望更强控制发送时机、避免 DMA 无限循环死锁。

http://www.dtcms.com/wzjs/805988.html

相关文章:

  • 织梦网站如何做404wordpress ux theme
  • 可以做内容的网站湘潭网站建设 AA磐石网络
  • 网站上传到虚拟服务器网站建设氵金手指下拉十二
  • 淘宝客没有网站怎么做上海所有公司名称
  • 网站建设学那些课深圳知名室内设计公司
  • 建行官方网站c 网站开发案例详解
  • 平面设计实例网站网站做招聘需要什么资质
  • 网站要有可留言功能 怎么做福州建站网络公司
  • 建网站建设的基本流程电商平台谈双11变冷
  • win7系统做网站服务器系统在吗做网站商城
  • 深圳外贸网站优化什么是企业网站策划案
  • 网站标题用什么符号分开珠海网站建设及优化
  • 上海网站关键词排名优化报价东莞全网合一网站
  • 网络公司 网站建设 小程序中国建设银银行招聘网站
  • 做网站去哪个公司好甘肃住房和城乡建设厅网站首页
  • 北京网站开发浩森宇特有什么网站做任务给钱的
  • 柞水县城乡建设局网站wordpress 页面转跳
  • 有经验的企业做网站wordpress实时交流插件
  • 文化馆网站建设磁力搜索器在线
  • 网站建设电话销售录音深圳网站营销推广公司电话
  • wordpress中文站cn电子工程网 ofweek
  • 做任务 网站深圳知名设计公司
  • 企业为什么做网站推广网站问题有哪些内容
  • 东莞网站建设东莞crm软件系统 运用
  • 有没有好的网站可以学做头发网址类网站怎么做
  • 建设网站需要提交什么资料企业网站营销的典型案例
  • 上行30m可以做网站吗企业公司网站建设公司
  • 手机怎么建设视频网站设计公司的logo
  • 简述如何让网站排名快速提升一站式营销型网站建设
  • 三航奔腾建设有限公司官方网站wordpress中文cms主题模板下载