你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
szgaos 发表于 2016-1-14 09:20 ' O$ x# b/ K& D' v这个问题是存在的用cube库时 6 D9 C! k5 M0 mvoid HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) ' G7 A* Q, `% _) e{
szgaos 发表于 2016-1-14 09:20 4 D3 G' g9 p2 O9 k这个问题是存在的用cube库时 $ i2 X* ?$ |5 wvoid HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) " {7 W: }5 P, o) u0 r{
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c): D* i0 ^% H1 I5 ^0 h2 G6 r. X
{5 J# m8 m+ w/ V/ ^7 m
GPIO_InitTypeDef GPIO_InitStruct;$ s; }) k1 H* t5 o/ ~5 \
if(hi2c->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */" v" \6 C7 t( ^2 p8 u
- l0 [: A# ~; G! W9 @1 o
/**I2C1 GPIO Configuration # c7 T4 m" M3 r8 u: A# S
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA
*/7 Z1 V c+ E4 K
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);1 k7 f4 F1 k* C7 j7 O/ U3 [/ N1 N5 R r
/* Peripheral clock enable */7 I; A( x- T2 j
__I2C1_CLK_ENABLE();9 U f6 ]; r3 u/ j6 E5 J
. Y6 F4 J% d- E( {) C
/* Peripheral interrupt init*/
HAL_NVIC_SetPriority(I2C1_EV_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(I2C1_EV_IRQn);
HAL_NVIC_SetPriority(I2C1_ER_IRQn, 0, 0); W+ Z9 Z$ u, l1 J ~2 ?) s. n
HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);
/* USER CODE BEGIN I2C1_MspInit 1 */
/* USER CODE END I2C1_MspInit 1 */
}. \8 g! A5 V! q; {' s
}0 p5 c( M: S% b' [; j9 G
这时总会处现在发送时就停在了busy这个位置,sda一直为低,后来看用以前的库写的/ k9 x3 y4 ?9 s6 f
__I2C1_CLK_ENABLE();是在GPIO设置之前,将它改到之前后就可以发送数据了,但是发现改后如再次用CUBE生成代码,它又回到了以前地方,因此再加个软复位来解决. K4 Y5 C: N# S3 D+ {
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)+ j; e7 k0 @7 w5 g
{
+ q! O8 G8 ~) ?/ ^) K2 A* M/ B
GPIO_InitTypeDef GPIO_InitStruct;0 J+ h! a3 b' W
if(hi2c->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */4 ?, k7 F: L" B2 F$ o3 {- M
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA 2 w, b* s1 L( d" M
*/$ H5 c+ @) a; |4 _
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;. Z- v5 w1 m _! Q2 k- O
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);' _" M3 r, n: l3 s# h: B
& k0 M+ t( C. G. q
/* Peripheral clock enable */
__I2C1_CLK_ENABLE();% I7 N/ c" _+ C7 ~, t/ G
) ?# a; ?& S- c, N' g5 ]( S7 {0 {
/* Peripheral interrupt init*/' |2 G+ M% W2 A4 F' ~% K5 C+ f! ?
HAL_NVIC_SetPriority(I2C1_EV_IRQn, 0, 0);# H. y3 L% A" g, v
HAL_NVIC_EnableIRQ(I2C1_EV_IRQn);1 E; h3 _+ v! @- E
HAL_NVIC_SetPriority(I2C1_ER_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);
/* USER CODE BEGIN I2C1_MspInit 1 */
SET_BIT(hi2c->Instance->CR1, I2C_CR1_SWRST);
CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_SWRST);; J( S" D4 ]6 Q# w* Y
/* USER CODE END I2C1_MspInit 1 */
}
}
试了一下果然可以解决这个问题,感谢!
RE:【ST MCU实战经验】I2C 接口进入 Busy 状态不能退出
有个问题请教下。
这样真的好了吗?参考一下