你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
szgaos 发表于 2016-1-14 09:20. h4 u4 F- [0 A2 k. \* e' P 这个问题是存在的用cube库时' i2 u2 T, G! q0 D# m) m void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) ' b! R s4 S9 O0 \. m{
szgaos 发表于 2016-1-14 09:20 % g& O2 v6 ?* M" |- `/ y' y这个问题是存在的用cube库时 m1 o3 ^. p. Y$ f. jvoid HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)6 o' R! x- e2 {8 }+ G: B1 B {
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
{# E. P" C6 i! g" P
GPIO_InitTypeDef GPIO_InitStruct;, B0 O; i4 [' d& h3 t- A
if(hi2c->Instance==I2C1)
{% h& E+ I% G) M4 P; @
/* USER CODE BEGIN I2C1_MspInit 0 */3 Z! ]- q3 F7 D$ J% C# x6 F9 m
# M2 S' i4 d9 n$ [2 {$ n0 R5 y+ B
/* USER CODE END I2C1_MspInit 0 */
8 _4 t. l; u/ U$ m
/**I2C1 GPIO Configuration 1 l8 o q" c+ J
PB6 ------> I2C1_SCL3 H2 S+ ?) h$ V1 e3 A
PB7 ------> I2C1_SDA
*/; M! @# z! _+ u! |
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;( B3 R$ P& f) n3 U
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/ d9 T) h2 l( y! V- J6 _$ `
6 d$ ]( k/ I, d+ f2 V7 |
/* Peripheral clock enable */1 }. O/ ` G2 p6 _5 v$ B
__I2C1_CLK_ENABLE();0 B6 l' |( I1 {( F; n7 [
/* Peripheral interrupt init*/7 N# h! e/ U* s a
HAL_NVIC_SetPriority(I2C1_EV_IRQn, 0, 0);8 t, F9 |! j/ ^* d6 [
HAL_NVIC_EnableIRQ(I2C1_EV_IRQn);- c. I0 D. G, \) H
HAL_NVIC_SetPriority(I2C1_ER_IRQn, 0, 0);8 v, p9 Q- ~" K7 h6 k9 P5 S
HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);* n0 ~1 b$ B8 `* h
/* USER CODE BEGIN I2C1_MspInit 1 */
/* USER CODE END I2C1_MspInit 1 */
}$ b) @5 m/ h6 r0 N
}0 Z; |9 M, z/ ^5 Q
这时总会处现在发送时就停在了busy这个位置,sda一直为低,后来看用以前的库写的
__I2C1_CLK_ENABLE();是在GPIO设置之前,将它改到之前后就可以发送数据了,但是发现改后如再次用CUBE生成代码,它又回到了以前地方,因此再加个软复位来解决1 w1 f: \7 f7 r6 E/ }& R! a) s5 [$ {
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c). @3 {3 C/ a! b3 V, O8 [! O9 i# Q
{
) m0 k" X$ |3 z' {# ~& v9 l
GPIO_InitTypeDef GPIO_InitStruct;
if(hi2c->Instance==I2C1)
{
/* USER CODE BEGIN I2C1_MspInit 0 */
/* USER CODE END I2C1_MspInit 0 */' Y' H/ Y( x) g
0 n( i* J$ ~2 S/ P* G2 Z1 a! A \
/**I2C1 GPIO Configuration
PB6 ------> I2C1_SCL
PB7 ------> I2C1_SDA " f0 J) U+ t# K
*/+ a9 c7 g" q' J7 w3 d; a1 a; r- l
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;# k9 S% a* O! }7 m
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;3 g" F: P( X4 W' S( [
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);; d# f3 b4 b4 B
/* Peripheral clock enable */
__I2C1_CLK_ENABLE();, r7 C- x3 g. A/ C5 S' m
/* 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);
HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);$ X2 z1 G1 d5 l" C5 F
/* USER CODE BEGIN I2C1_MspInit 1 */2 L- b9 E1 V. C& l
SET_BIT(hi2c->Instance->CR1, I2C_CR1_SWRST);" @+ L5 {( {2 C! U. V
CLEAR_BIT(hi2c->Instance->CR1, I2C_CR1_SWRST);7 U! i1 @. }8 I0 R s
/* USER CODE END I2C1_MspInit 1 */& \8 L( Q. N7 k& B; q* ~, I
}# h) a4 I& i/ o0 M* T
}
试了一下果然可以解决这个问题,感谢!
RE:【ST MCU实战经验】I2C 接口进入 Busy 状态不能退出
有个问题请教下。
这样真的好了吗?参考一下