登录/注册

stm32f103rb dma与串口

更多

在STM32F103RB中使用DMA(直接内存访问)与串口(如USART)结合,可以显著提升数据传输效率,减少CPU负载。以下是关键步骤和注意事项:


1. 硬件资源


2. 配置步骤

2.1 初始化串口(以USART1为例)

// 使能USART1和GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

// 配置TX(PA9)和RX(PA10)引脚为复用推挽和浮空输入
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置USART1参数
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE);

2.2 配置DMA(以USART1_TX为例)

// 使能DMA1时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

// 配置DMA发送
DMA_InitTypeDef DMA_InitStruct;
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&USART1->DR;  // 外设地址(数据寄存器)
DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)tx_buffer;        // 内存地址(发送缓冲区)
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;                // 传输方向:内存到外设
DMA_InitStruct.DMA_BufferSize = buffer_size;                   // 数据长度
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  // 外设地址不递增
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;           // 内存地址递增
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;                     // 单次传输模式
DMA_InitStruct.DMA_Priority = DMA_Priority_High;
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;                      // 非内存到内存模式
DMA_Init(DMA1_Channel4, &DMA_InitStruct);

// 使能DMA通道
DMA_Cmd(DMA1_Channel4, ENABLE);

// 使能USART1的DMA发送请求
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

3. 关键注意事项

  1. 缓冲区管理

    • 确保内存缓冲区(如tx_bufferrx_buffer)是全局变量或静态变量,避免被释放。
    • 使用DMA_ClearFlag()清除传输完成标志(如DMA1_FLAG_TC4)。
  2. 传输模式

    • 单次模式DMA_Mode_Normal):传输完成后DMA自动停止。
    • 循环模式DMA_Mode_Circular):适用于持续传输(如实时数据流)。
  3. 中断处理(可选):

    • 启用DMA传输完成中断,在传输完成后处理数据:
      DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);
      NVIC_EnableIRQ(DMA1_Channel4_IRQn);
  4. 启动传输

    • 调用DMA_Cmd()启动DMA,或使用HAL库的HAL_UART_Transmit_DMA()

4. 常见问题


通过合理配置DMA和串口,可以实现高效的数据传输,适用于高速通信场景(如Modbus、传感器数据采集等)。

创建自己stm32电机控制工程,需要将MC_library的target配置device成stm32F103RB吗?

根据stm32 PMSM FOC4.3版本定制自己的电机控制工程,MCU是stm32F103RB ,在编译工程时,需要将MC_library的target配置device成

2024-04-29 07:32:36

求CS1180的STM32F103RB驱动,413054581@qq,急用

求CS1180的STM32F103RB驱动,413054581@qq,急用

2024-04-22 17:25:39

求CS1180的STM32F103RB驱动,640450701@qq谢谢了

求CS1180的STM32F103RB驱动,640450701@qq谢谢了

2024-03-15 11:34:48

使用STM32F103RB单片机实现外部中断实验的资料详细说明

本文档的主要内容详细介绍的是使用STM32F103RB单片机实现外部中断实验的资料详细说明。

资料下载 Squirrelgoddess 2020-04-07 08:00:00

使用STM32F103RB单片机实现串口实验的详细资料说明

使用STM32F103RB单片机实现串口实验的详细资料说明。

资料下载 Squirrelgoddess 2020-04-07 08:00:00

STM32F103RB单片机实现按键实验的资料免费下载

本文档的主要内容详细介绍的是STM32F103RB单片机实现按键实验的资料免费下载。

资料下载 Squirrelgoddess 2020-04-07 08:00:00

使用STM32F103RB单片机实现蜂鸣器实验的详细资料说明

本文档的主要内容详细介绍的是使用STM32F103RB单片机实现蜂鸣器实验的详细资料说明。

资料下载 Squirrelgoddess 2020-04-07 08:00:00

使用STM32F103RB单片机实现PWM呼吸灯实验的资料免费下载

本文档的主要内容详细介绍的是使用STM32F103RB单片机实现PWM呼吸灯实验的资料免费下载。

资料下载 Squirrelgoddess 2020-04-07 08:00:00

如何去实现STM32F103RB最小核心板的主函数呢

STM32F103RC MINI开发板怎样采用LCD液晶显示接收与发送数据呢?如何去实现STM32F103RB最小核心板的主函数呢?

2021-12-16 07:20:31

基于STM32F103RB的数码管如何去实现十分钟计时呢

基于STM32F103RB的数码管如何去实现十分钟计时呢?其中断代码是怎样的?

2021-11-17 06:12:26

STM32F103RB内部FLASH只有128K,怎么外扩FLASH

STM32F103RB内部FLASH只有128K,它不像DSP有地址和数据总线,想知道如何外扩FLASH!求指教

2020-06-15 06:13:00

STM32F103RB高级定时器

STM32F103RB有3个普通定时器好像是TIM2,3,4 还有一个高级定时器请问是几啊 还有设置和普通的一样吗

2020-04-14 00:50:52

请问ucos移植下载ucos时找不到Mini的芯片用stm32f103RB代替行吗 ?

没找到stm32f103RC 我用stm32f103RB代替行么?谢谢大哥们

2019-08-05 23:15:37

请问stm32f103ze和stm32f103rb(vb)两个移植模板什么区别?

micrim公司官网提供的STM32移植版的UCOSII,有stm32f103ze和stm32f103rb(vb)两个移植模板,这两个模板有什么

2019-07-05 03:50:52

ucosiii移植到STM32F103RB的程序

ucosiii移植到STM32F103RB的程序,分享给有需要的朋友学习,程序很简单,3个运行灯的任务ucosiii-STM32F103RB.zip (15.77 MB )

2019-05-14 06:36:04
7天热门专题 换一换
相关标签