cancel
Showing results for 
Search instead for 
Did you mean: 

STM32 i2c NO FUNCIONA con los buses APB1 a frecuencia mayor de 4MHz, a que es debido?

PFern.1
Associate

Fecha. 29-04-2021.

Pedro A. Fernandez.          

Para quien pueda explicar los motivos de la mala funcionalidad del periférico i2c

Hola, recientemente comenze a programar los micros STM32, con el modelos STM32F103C8T6 montados en la placa Blue Pill, iniciando el proyecto con CubeMX y el IDE de KEIL, C y las HAL, incluso sin las HAL, inicialmente todo bien, hasta que empecé la programación en el Bus i2c, ya desde el primer programa NO FUNCIONABA, ni con CubeMX y HAL, NI sin HAL programando por registros, es decir i2c NO funcionaba.

               Despuás de muchas..., horas en internet buscando información lo único que observe es que mucha gente tenía el mismo problema, sin que nadie aportase solución.

Buscando información en la manuales,(que por cierto está dispersasen varias notas), tampoco me funcionó, si yo no me equivoco y según figura en los manuales los periféricos pueden funcionar con los buses hasta 24/32MHz.

               Como parecía que algunos culpaban a las placas chinas, compre una placa prototipo de VDs, en concreto la Placa STM32F103RBT6 Nucleo-64.   EL resultado fue el mismo que con la Blue Pill, fracaso total.

Otro intento mas, me compre una la Placa STM32F103C8T6_CBT6 Modulo de color negro, y por FIN i2c comenzó a FUNCIONAR.   Funciona con el Clock a 72MHz, y APB1-pre-escaler de 2, Frecuencia de 36MHz.

Parecía como si fuesen las placas anteriores que estuviesen mal.

Por lo que se me ocurrió comenzar a bajar la frecuencia de los Buses APB1 y APB2 hasta encontrar con las frecuencia que tanto la Blue Pill como la Nucleo-64, el i2c comenzó a funcionar normalmente a 4Mhz en el Bus, si se utiliza el Clock Externo HSE, si se utiliza el Clock interno HSI, parece que funciona hasta 8MHz.  sin embargo estableciendo los buse en 8MHz y utilizó HSE a través del PLL NO FUNCIONA.

Después de realizar varias pruebas, manipulando las frecuencias de los Buses y los Periféricos logre encontrar las que me funcionaba y de las que les aporto varias fotografías.

¿Podrán darme alguna respuesta a lo que les expongo?

Pues parece que son las MCU las que provocan los FALLOS.  Siguen las pruebas realizadas documentado con fotografías:

 

 

Tradución en google, teneís que perdonar

For those who can explain the reasons for the malfunction of the i2c peripheral

Hello, I recently started to program the STM32 mics, with the STM32F103C8T6 models mounted on the Blue Pill board, starting the project with CubeMX and the KEIL IDE, C and the HALs, even without the HALs, initially everything was fine, until I started the programming in the i2c Bus, from the first program it DID NOT WORK, neither with CubeMX and HAL, NOR without HAL programming by registers, that is, i2c DID NOT work.

After many ... hours on the internet looking for information, the only thing I observed is that many people had the same problem, without anyone providing a solution.

Looking for information in the manuals, (which by the way is scattered several notes), it did not work for me either, if I am not mistaken and as stated in the manuals the peripherals can work with buses up to 24 / 32MHz.

Since it seemed that some blamed the Chinese boards, I bought a prototype board from VDs, specifically the STM32F103RBT6 Nucleo-64 Board. The result was the same as with the Blue Pill, total failure.

Another try, I bought a black STM32F103C8T6_CBT6 Module Board, and finally i2c began to WORK. It works with the Clock at 72MHz, and APB1-prescaler of 2, Frequency of 36MHz.

It seemed as if it were the previous plates that were wrong.

So it occurred to me to start lowering the frequency of Buses APB1 and APB2 until I found with the frequency that both the Blue Pill and the Nucleo-64, the i2c began to work normally at 4Mhz on the Bus, if the Clock is used External HSE, if the internal HSI Clock is used, it seems to work up to 8MHz. however setting the busses to 8MHz and using HSE through the PLL DOES NOT WORK.

After carrying out several tests, manipulating the frequencies of the Buses and the Peripherals, I managed to find the ones that worked for me and of which I contribute several photographs.

Can you give me an answer to what I am exposing you?

Well, it seems that the MCUs are causing the BUGS. The tests carried out, documented with photographs, follow:

1 REPLY 1
PFern.1
Associate