我有以下 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)