我想使用 bluenrg-355MT 访问 i2c 设备,我在 bluenrg_lp_evb_i2c 文件中使用 BlueNRG-LP DK 1.0.0 的函数。当我下载和调试时,i2c 工作正常,但在发布模式下没有 i2c 信号。
这是我检测光传感器的代码:
- BSP_I2C_Init();
- HAL_StatusTypeDef ret;
- ret = HAL_I2C_IsDeviceReady(&hi2cx, 0x10<<1, 1, 10);
- if( ret != HAL_OK )
- printf("Device not present.rn");
- else
- printf("Light sensor detected.rn");
无论参数如何,都没有信号。
I2C 配置如下:
- /* Initialize the GPIOs associated to the I2C port */
- BSP_I2C_DATA_GPIO_CLK_ENABLE();
- LL_GPIO_SetPinMode(BSP_I2C_DATA_GPIO_PORT, BSP_I2C_DATA_PIN, LL_GPIO_MODE_ALTERNATE);
- LL_GPIO_SetPinSpeed(BSP_I2C_DATA_GPIO_PORT, BSP_I2C_DATA_PIN, LL_GPIO_SPEED_FREQ_HIGH);
- LL_GPIO_SetPinOutputType(BSP_I2C_DATA_GPIO_PORT, BSP_I2C_DATA_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
- LL_GPIO_SetPinPull(BSP_I2C_DATA_GPIO_PORT, BSP_I2C_DATA_PIN, BSP_I2C_DATA_GPIO_PULL);
- BSP_I2C_DATA_GPIO_AF();
- BSP_I2C_CLK_GPIO_CLK_ENABLE();
- LL_GPIO_SetPinMode(BSP_I2C_CLK_GPIO_PORT, BSP_I2C_CLK_PIN, LL_GPIO_MODE_ALTERNATE);
- LL_GPIO_SetPinSpeed(BSP_I2C_CLK_GPIO_PORT, BSP_I2C_CLK_PIN, LL_GPIO_SPEED_FREQ_HIGH);
- LL_GPIO_SetPinOutputType(BSP_I2C_CLK_GPIO_PORT, BSP_I2C_CLK_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
- LL_GPIO_SetPinPull(BSP_I2C_CLK_GPIO_PORT, BSP_I2C_CLK_PIN, BSP_I2C_CLK_GPIO_PULL);
- BSP_I2C_CLK_GPIO_AF();
- /* Initialize the I2C clock */
- BSP_I2C_CLK_ENABLE();
- LL_I2C_Disable(BSP_I2C);
- /* Configure the SDA setup, hold time and the SCL high, low period
- * For Fast-mode 400 kHz, PRESC | 0h | SCLDEL | SDADEL | SCLH | SCLL
- * 1h | 0h | 3h | 2h | 03h | 09h
- */
- LL_I2C_SetTiming(BSP_I2C, 0x10320309);
- /* Enable Clock stretching */
- LL_I2C_EnableClockStretching(BSP_I2C);
- /* Enable Peripheral in I2C mode */
- LL_I2C_SetMode(BSP_I2C, LL_I2C_MODE_I2C);
- /* Enable the I2C peripheral */
- LL_I2C_Enable(BSP_I2C);
其 I2C1 CLK-PA0 DATA-PA1
调试模式是否可以通过启用所有时钟和
电源路径来强制外设工作,所以我忘了启用某些东西?或者从 µC 配置的角度来看,发布和调试之间有什么区别?
谢谢你的帮助,