小编Dav*_*vis的帖子

动态 DMA 传输

我有以下 snipper 来生成声音,在 while 循环中,我想动态更改它,以便在声音生成过程中创建不同频率的声音。

for(uint16_t i = 0; i < sample_N; i++)
{
    dataI2S[i*2] = i*5000; 
    dataI2S[i*2 + 1] =i*5000; 
} 

HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t *)dataI2S, sample_N*2);

while (1)
{
    ps = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
    HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t *)dataI2S, sample_N*b);

    b++;
    if (b == 5)
        b = 1;

    if(ps){
        generate();
        HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, ps);
    } else {
        stop();
        HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, 0);   
    }
}
Run Code Online (Sandbox Code Playgroud)

它仅使用第一个 sample_N*b 值生成声音。它不会动态更改。

如何HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t *)dataI2S, sample_N*b);动态更改?

void DMA1_Stream5_IRQHandler(void) {
if(x % 2 == 1)
    HAL_I2S_Transmit_DMA(&hi2s3, (uint16_t *)dataI2S, sample_N*2); …
Run Code Online (Sandbox Code Playgroud)

c stm32 dma

3
推荐指数
1
解决办法
207
查看次数

标签 统计

c ×1

dma ×1

stm32 ×1