初级会员

- 积分
- 52
- 金钱
- 52
- 注册时间
- 2021-4-3
- 在线时间
- 41 小时
|
1金钱
本帖最后由 kilomgcm 于 2021-5-8 18:26 编辑
求助高手:用的原子哥通用的模拟i2c程序驱动1602,但是sda口一直高电平5v(1602单独5v供电),SCL口一直1.5v,驱动失败。不知道是什么原因。
主程序
int main(void)
{
delay_ms(500);
RCC_Configuration(); //时钟设置
IIC_Init();//IIC初始化AT24CXX_Init(); //IIC初始化
LCD1602_Init();
while(1)
{
ShowString(2, 2, "Hello World!"); //这里有个警告,好像是字符类型冲突,函数原型,void ShowString(unsigned char x, unsigned char y, unsigned char* str)
delay_ms(500);
LED = 0;
delay_ms(500);
LED = 1; // i++;
}
}
//IO方向设置
#define SDA_IN() {GPIOB->CRL&=0XFFFF0FFF;GPIOB->CRL|=0X00008000;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFF0FFF;GPIOB->CRL|=0X00003000;}
//IO操作函数
#define IIC_SCL PBout(4) //SCL
#define IIC_SDA PBout(3) //SDA
#define READ_SDA PBin(3) //输入SDA
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4|GPIO_Pin_12);
keil仿真波形
仿真波形
|
|