GD32F130模拟IIC程序(读写功放芯片寄存器)

该代码实现了一个基于STM32的模拟IIC通信协议,包括初始化、开始信号、停止信号、发送数据、读取数据等功能。当将GPIO_PUPD_PULLUP改为GPIO_PUPD_NONE后,读取寄存器值出现问题。
#define EE_SCL_PIN GPIO_PIN_0 //模拟IIC的SCL信号 
#define EE_SDA_PIN GPIO_PIN_1 //模拟IIC的SDA信号

#define EE_IIC_SCL(val) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, val) //SCL
#define EE_IIC_SDA(val) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, val) //SDA

uint8_t HAL_GPIO_ReadPin(uint32_t gpio_periph, uint32_t GPIO_PIN_x)
{
	return gpio_input_bit_get(gpio_periph,GPIO_PIN_x);
}

unsigned char EE_READ_SDA(void)
{
	return HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
}

void EE_SDA_IN(void) //配置成输入
{

	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP , GPIO_PIN_1);
}
void EE_SDA_OUT(void) //配置成输出
{
	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
	gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);
}

void EE_SCK_OUT(void) //配置成输出
{
	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
	gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0);
}

/* 此函数移植 */
void HAL_GPIO_WritePin(uint32_t gpio_periph, uint32_t GPIO_PIN_x, uint32_t val)
{
	if (val == 1)
		gpio_bit_write(gpio_periph, GPIO_PIN_x,SET);
	else
		gpio_bit_write(gpio_periph, GPIO_PIN_x,RESET);
}



/******************************************************************************
*函  数:void EE_IIC_Delay(void)
*功 能:IIC延时ms
*参  数:无
*返回值:无
*备  注: 移植时只需要将EE_IIC_Delay()换成自己的延时即可
*******************************************************************************/
static void EE_IIC_Delay(int us)
{
	int i;
	while
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值