2020-01-02 10:54 AM
I need to connect X-NUCLEO-CCA02M1 with NUCLEO-401RE and I would like to use I2S.
I understood that I need to use a double-clock for the I2S and a clock for the expansion board because I need to read data from rising and falling edge of the clock, but from datasheet of Microphones I read this:
and the minimum clock that I can reach is 14.4 MHz (from CUBEMX) , and thus I should sent 7.2 MHz to expansion board. I can't do it.
How can I solve this?
I have to use HSI e LSI. I don't have HSE.
In any application note that I saw, they used a I2S as master, but
is it correct to use it as a slave? I could use a clock generated by a TIMx. if it is possible, how can I link a Timer to I2Sclock? Should I do it by software or is it possible do it in hardware?
thank you.
2020-03-31 08:41 AM
Hi @MFava.1 , sorry to come back to your request so late... To go into the detail of the issue, the STM32F401 embeds a PLL that is the clock generator for the I2S interface. This clock is itself divided from the I2S peripheral to get the desired output clock. This way, given the input clock and the desired output frequency, the Hal driver sets the I2S peripheral dividers to get the best division (the one that better approximates the desired output clock). You basically need to see which is the value of this clock generated from the PLL and feeding the I2S block in the original configuration of the MEMSMIC1 example (it will depend on the sample frequency). To do this, you have to correctly set the entire clock tree (in the function SystemClock_Config() there are the common section parameters of the mic board drivers, while the function MX_I2S_IN_ClockConfig contains the PLL settings of the I2S peripherals). Once you have understood the value of that clock, you have to get the same value for the HSI instead of the one of the HSE. Probably, in general, it's enough to double the divisor M and modify the two before mentioned functions. Regards