2019-07-20 08:54发布
正点原子 发表于 2017-4-12 20:52 直接搬我们代码,然后修改下IO口就行了。。。
MeiYüTseng 发表于 2017-6-17 10:55 void IIC_Stop(void) 函数时序有问题,改成如下即可: void IIC_Stop(void) {
最多设置5个标签!
确确实实是搬得代码,只改了一下IO。因为被这个问题害的出了一次差,所以每句都核对了好几遍。。。就是不行。。。与阿波罗例程不同的仅以下蓝 {MOD}部分改为了红 {MOD}
"myiic.h"中
//IO方向设置
/*
#define SDA_IN() {GPIOH->MODER&=~(3<<(5*2));GPIOH->MODER|=0<<5*2;} //PH5输入模式
#define SDA_OUT() {GPIOH->MODER&=~(3<<(5*2));GPIOH->MODER|=1<<5*2;} //PH5输出模式
//IO操作函数
#define IIC_SCL PHout(4) //SCL
#define IIC_SDA PHout(5) //SDA
#define READ_SDA PHin(5) //输入SDA
*/
#define SDA_IN() {GPIOB->MODER &= ~(3<<(7*2)); GPIOB->MODER |= 0<<(7*2);} //PB7输入模式
#define SDA_OUT() {GPIOB->MODER &= ~(3<<(7*2)); GPIOB->MODER |= 1<<(7*2);} //PB7输出模式
#define IIC_SCL PBout(6) //SCL
#define IIC_SDA PBout(7) //SDA
#define READ_SDA PBin(7) //输入SDA
“myiic.c”中
void IIC_Init(void)
{
// RCC->AHB1ENR|=1<<7; //使能PORTH时钟
// GPIO_Set(GPIOH,PIN4|PIN5,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PH4/PH5设置
RCC->AHB1ENR|=1<<2; //使能PORTB时钟
GPIO_Set(GPIOB, PIN7, GPIO_MODE_OUT, GPIO_OTYPE_OD, GPIO_SPEED_25M, GPIO_PUPD_NONE);//PB7-SDA
GPIO_Set(GPIOB, PIN6, GPIO_MODE_OUT, GPIO_OTYPE_PP, GPIO_SPEED_25M, GPIO_PUPD_NONE);//PB6-SCL
IIC_SCL=1;
IIC_SDA=1;
}
强调一下,现在的问题是 在优化大于0的情况,仅“写入”不行,读24C02在各种优化条件下都没有问题。
我下载过阿波罗的工程,工程里面的优化设置都为0。我用优化0测试,也能通过。一改到优化1就不行。
麻烦哪位有阿波罗板的兄弟改一下优化,然后测试一下,到底有没有我发现的问题。
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=1;//0;
IIC_SDA=0;
delay_us(4);
// IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
厉害。。。
一周热门 更多>