stm32通过dma通道发送一个数组的代码如何编写
时间: 2023-06-04 18:02:46 浏览: 51
你好,以下是利用 DMA 通道发送一个数组的示例代码:
```
#include "stm32xxxx.h"
#define ARRAY_SIZE 10 // 数组大小
void DMA_Config(void)
{
/* 使能 DMA1 时钟 */
RCC->AHBENR |= RCC_AHBENR_DMA1EN;
/* 配置 DMA1 通道 x */
DMA1_ChannelX->CCR &= ~DMA_CCR_EN; // 关闭 DMA1 通道 x
DMA1_ChannelX->CCR |= DMA_CCR_DIR; // 设置为内存到外设模式
DMA1_ChannelX->CCR |= DMA_CCR_MINC; // 设置为增量模式
DMA1_ChannelX->CCR |= DMA_CCR_MSIZE_0; // 存储器数据宽度为 16 位
DMA1_ChannelX->CCR |= DMA_CCR_PSIZE_0; // 外设数据宽度为 16 位
DMA1_ChannelX->CCR |= DMA_CCR_TCIE; // 开启传输完成中断
DMA1_ChannelX->CNDTR = ARRAY_SIZE; // 设置转移数据量大小
DMA1_ChannelX->CMAR = (uint32_t) array; // 存储器地址
DMA1_ChannelX->CPAR = (uint32_t) &USARTx->TDR; // 外设地址
DMA1_ChannelX->CCR |= DMA_CCR_EN; // 开启 DMA1 通道 x
}
void USART_Send_DMA(void)
{
/* 配置 DMA1 通道 x */
DMA_Config();
/* 开始 USART 对应 GPIO 端口的时钟 */
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
/* 配置 USART 为 9600, 8N1 */
USARTx->BRR = USART_DIV_SAMPLING16(SystemCoreClock, 9600);
USARTx->CR1 |= USART_CR1_UE;
USARTx->CR1 &= ~(USART_CR1_M | USART_CR1_PCE);
USARTx->CR2 &= ~USART_CR2_STOP;
USARTx->CR3 |= USART_CR3_DMAT;
/* 启动 DMA 传输 */
DMA1_ChannelX->CCR &= ~DMA_CCR_EN;
DMA1_ChannelX->CNDTR = ARRAY_SIZE;
DMA1_ChannelX->CCR |= DMA_CCR_EN;
/* 循环检查 DMA 传输是否完成 */
while (!(DMA1->ISR & DMA_ISR_TCIFX));
DMA1->IFCR |= DMA_IFCR_CTCIFX;
/* 关闭 DMA1 */
DMA1_ChannelX->CCR &= ~DMA_CCR_EN;
/* 关闭 USART1 */
USARTx->CR1 &= ~USART_CR1_TE;
USARTx->CR1 &= ~USART_CR1_UE;
}
```
请注意,本代码仅供示例使用,您需要根据实际需求,修改对应的寄存器和参数。
如果您对代码有任何疑问,请随时和我交流。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)