之前测试用PWM输出音频, 音频是8KHz 8bit, 用DMA方式, 一直有问题, 拿分析仪查, 最后总结的原因是DMA配的外设位宽和时钟的计数器位宽不一致, 配置时选的TIM2计数器是32bit的, 代码里配的是HALFWORD, 把下面两处都改成WORD才能正常工作
hdma_tim2_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_tim2_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
但是内存数组用WORD太占空间了, 但是如果用字节数组, 就是把数组换成uint8_t[], 把上面的 MemDataAlignment 的值换成 DMA_MDATAALIGN_BYTE, 就不能正常工作了.
如果把定时器换成TIM3, 因为计数器是16bit的, 所以数组用uint16_t[], 两个位宽设置都用HALFWORD, 也能正常工作.
但是uint16_t还是比较浪费
所以想请教各位大佬, 这里的外设和内存位宽设置的意义是啥? 看起来只要外设是WORD, 内存数组也必须是WORD, 外设是HALFWORD, 内存数组也必须是HALFWORD, 其实是不能改的? 有没有什么办法可以让数组用BYTE, DMA传给WORD的定时器?
--
FROM 60.253.242.*