stm32g473的ll库配置硬件i2C+DMA
时间: 2023-08-11 17:08:26 浏览: 552
以下是在stm32g473芯片上使用LL库配置硬件I2C和DMA的步骤:
1. 选择SCL和SDA引脚,并将它们分别连接到正确的GPIO引脚。在本例中,我们将使用PB8作为SCL引脚,PB9作为SDA引脚。
2. 打开I2C时钟,选择要使用的I2C通道。在本例中,我们将使用I2C1通道。
```
// 打开 I2C1 时钟
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
```
3. 配置I2C主模式,并设置I2C时钟速率和数据传输方向。在本例中,我们将设置I2C时钟速率为100kHz,数据传输方向为写入。
```
// 配置 I2C1 主模式
LL_I2C_SetMode(I2C1, LL_I2C_MODE_I2C);
// 配置 I2C1 时钟速率
LL_I2C_ConfigSpeed(I2C1, SystemCoreClock, 100000, LL_I2C_DUTYCYCLE_2);
// 配置 I2C1 数据传输方向
LL_I2C_SetTransferDirection(I2C1, SLAVE_ADDRESS, LL_I2C_DIRECTION_WRITE);
```
4. 配置DMA传输参数,包括数据长度、存储器地址、外设地址和传输方向。在本例中,我们将使用DMA1通道3,将发送8字节数据。
```
// 配置 DMA 传输参数
LL_DMA_ConfigTransfer(DMA1, LL_DMA_CHANNEL_3, LL_DMA_DIRECTION_MEMORY_TO_PERIPH |
LL_DMA_MODE_NORMAL | LL_DMA_PERIPH_NOINCREMENT |
LL_DMA_MEMORY_INCREMENT | LL_DMA_PDATAALIGN_BYTE |
LL_DMA_MDATAALIGN_BYTE | LL_DMA_PRIORITY_HIGH);
LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_3, (uint32_t)src_buf, \
(uint32_t)&I2C1->TXDR, LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_3));
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_3, 8);
```
5. 打开I2C DMA传输模式,并使能DMA传输完成中断。
```
// 打开 I2C DMA传输模式
LL_I2C_EnableDMAReq_TX(I2C1);
// 使能 DMA 传输完成中断
LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_3);
```
6. 最后启动DMA传输和I2C传输。
```
// 启动 DMA 传输
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_3);
// 启动 I2C 传输
LL_I2C_Enable(I2C1);
```
以上是使用LL库配置硬件I2C和DMA的基本步骤,需要根据具体应用场景进行修改和优化。
阅读全文