Page 1 of 1

I2S isn't working with external clock source

Posted: Mon Nov 02, 2015 5:06 pm
by Kosyak
Found bug in ChibiOS HAL for STM32F4 - I2S peripheral isn't working when switched to external clock source (I2S_CKIN).

Diving into ChibiOS HAL sources shows me that STM32_I2SSRC macro (from mcuconf.h) used only for turning on PLLI2S, not for actual clock switching (I2SSRC bit in RCC_CFGR)

So here's trivial patch to fix this issue:

Code: Select all

diff --git a/os/hal/ports/STM32/STM32F4xx/hal_lld.c b/os/hal/ports/STM32/STM32F4xx/hal_lld.c
index ff9ff93..2911b49 100644
--- a/os/hal/ports/STM32/STM32F4xx/hal_lld.c
+++ b/os/hal/ports/STM32/STM32F4xx/hal_lld.c
@@ -245,7 +245,8 @@ void stm32_clock_init(void) {
 
   /* Other clock-related settings (dividers, MCO etc).*/
   RCC->CFGR = STM32_MCO2PRE | STM32_MCO2SEL | STM32_MCO1PRE | STM32_MCO1SEL |
-              STM32_RTCPRE | STM32_PPRE2 | STM32_PPRE1 | STM32_HPRE;
+              STM32_I2SSRC | STM32_RTCPRE | STM32_PPRE2 | STM32_PPRE1 |
+              STM32_HPRE;
 
   /* Flash setup.*/
 #if defined(STM32_USE_REVISION_A_FIX)


Re: I2S isn't working with external clock source

Posted: Mon Nov 09, 2015 11:57 am
by Giovanni
Hi,

Sorry, I forgot about this and it missed 3.0.3. It is fixed in the repository and will go in 3.0.4.

Thanks for the patch.

Giovanni