2016-01-08 08:15 AM
I am attempting to port the ''I2C_TwoBoards_ComDMA'' example project to run on a different target board (ZMDI ZWIR451x Development Board) using Rowley CrossStudio as an IDE. This target has an STM32F103RC micro.
After getting all the right files included and configured (I think) so that the project will build and execute, I discover that the ''non-blocking'' function 'HAL_I2C_Slave_Receive_DMA(...)' contains two calls to 'I2C_WaitOnFlagUntilTimeout(...)' the second one causes the slave node to timeout and go into 'error mode' before the master can even start transmitting. Also, the comment states ''/* Wait until ADDR flag is set */'', yet the function arguments say otherwise: ''(hi2c, I2C_FLAG_ADDR, RESET, I2C_TIMEOUT_ADDR_SLAVE) != HAL_OK)''Can anyone explain this logic? Does ''non-blocking'' mean something different in this version of reality? #i2c #hal #dma #stm32cubef12016-01-09 11:22 AM
Nothing? Really? Is there an ST presence in this forum?
2016-01-09 07:20 PM
It is primarily a user forum, ST doesn't have a heavy presence.
There's a great deal in the HAL/Cube that defies logic, beyond the pointy-clicky-monkey-presses-the-button stuff it makes my head hurt.2016-01-11 08:37 AM
That's pretty much what I concluded. After several days of trying to comprehend the Cube architecture, I came to the conclusion that someone went to great lengths to create thoroughly obfuscated code that is, for all practical purposes, inpenetrable. The coding style and naming conventions alone are enough to make my brain explode.
ST documentation is only slightly more comprehensible and has left me leaning back towards TI for solutions for my current project.I really thought working with the ZWIR4512 platform from ZMDI would be a little less painful, but alas it is destined for the pile of dust collectors....