金牌会员
 
- 积分
- 1406
- 金钱
- 1406
- 注册时间
- 2021-4-28
- 在线时间
- 526 小时
|
20金钱
#define IIC_SCL_GPIO_PORT GPIOB
#define IIC_SCL_GPIO_PIN GPIO_PIN_6
#define IIC_SCL_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)
#define IIC_SDA_GPIO_PORT GPIOB
#define IIC_SDA_GPIO_PIN GPIO_PIN_7
#define IIC_SDA_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)
/* 寄存器引脚 定义 */
#define IIC_SCL(x) IIC_SCL_GPIO_PORT->BSRR = IIC_SCL_GPIO_PIN << (16 * (!x))
#define IIC_SDA(x) IIC_SDA_GPIO_PORT->BSRR = IIC_SDA_GPIO_PIN << (16 * (!x)) /* 这样寄存器控制输出IO不能完成IIC驱动 */
/* HAL IO操作 */
#define IIC_SCL(x) do{ x ? \
HAL_GPIO_WritePin(IIC_SCL_GPIO_PORT, IIC_SCL_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(IIC_SCL_GPIO_PORT, IIC_SCL_GPIO_PIN, GPIO_PIN_RESET); \
}while(0) /* SCL */
#define IIC_SDA(x) do{ x ? \
HAL_GPIO_WritePin(IIC_SDA_GPIO_PORT, IIC_SDA_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(IIC_SDA_GPIO_PORT, IIC_SDA_GPIO_PIN, GPIO_PIN_RESET); \ /* 用HAL库却可以 */
}while(0) /* SDA */
寄存器仿真寄存器是可以正常输出高低的,但就是通讯失败
|
最佳答案
查看完整内容[请看2#楼]
换一种表达 这样又可以
#define IIC_SCL(x) do { x ? \
(GPIOB->BSRR |= 1
|