OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3834|回复: 15

求助关于GPIO模拟IIC通讯的问题

[复制链接]

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
发表于 2015-12-28 11:01:46 | 显示全部楼层 |阅读模式
1金钱
我用原子个模拟的IIC程序能够读取我的芯片值,但是我换个IO口模拟就会出现读不出数据或者OXFF!这是什么情况?我只是换了端口


//#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
//#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}
//#define SCL_OUT() {GPIOB->CRH&=0XFFFFF0FF;GPIOB->CRH|=3<<8;}
#define SCL_OUT() {GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=3<<16;}
#define SDA_IN()  {GPIOB->CRH&=0X0FFFFFFF;GPIOB->CRH|=8<<20;}
#define SDA_OUT() {GPIOB->CRH&=0X0FFFFFFF;GPIOB->CRH|=3<<20;}




//#define SDA_IN()  {GPIOB->CRH&=~(0XF<<(3*4));GPIOB->CRH|=8<<3*4;}
//#define SDA_OUT() {GPIOB->CRH&=~(0XF<<(3*4));GPIOB->CRH|=3<<3*4;}
//#define SDA_IN()  {GPIOB->CRH&=~(0XF<<(4*4));GPIOB->CRH|=8<<4*4;}
//#define SDA_OUT() {GPIOB->CRH&=~(0XF<<(4*4));GPIOB->CRH|=3<<4*4;}
//IO2ù×÷oˉêy         
/*#define IIC_SCL_SET GPIO_SetBits(GPIOB,GPIO_Pin_10)
#define IIC_SCL_CLR GPIO_ResetBits(GPIOB,GPIO_Pin_10)
#define IIC_SDA_SET GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define IIC_SDA_CLR GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define READ_SDA   GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) //ê&#228;è&#235;SDA */
#define IIC_SCL_SET GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define IIC_SCL_CLR GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define IIC_SDA_SET GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define IIC_SDA_CLR GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define READ_SDA   GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) //ê&#228;è&#235;SDA

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=applescript,true]/** *********************************** * 模拟IIC通讯驱动 * * (C) Copyright 2000-2020, ** * All Rights Reserved *********************************** * * @File : bsp_iic.c * @By : ** * @Version : V1.0 * @Date : 2015 / 02 / 28 * ************** ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-12-28 11:01:47 | 显示全部楼层
[mw_shl_code=applescript,true]/**
  ***********************************
  *                               模拟IIC通讯驱动
  *
  *                       (C) Copyright 2000-2020, **
  *                             All Rights Reserved
  ***********************************
  *
  * @File    : bsp_iic.c
  * @By      : **
  * @Version : V1.0
  * @Date    : 2015 / 02 / 28
  *
  ***********************************
  *
  *                                   Update
  *
  * @Version : V1.1
  * @By      : **
  * @Date    : 2015 / 10 / 16
  * @Brief   : A、增加对Cortex-CM3和Cortex-CM4内核自动切换支持
  *            B、增加对51平台和ARM平台宏定义
  *            C、修改控制端口,直接修改头文件中的宏定义即可
  *
  ***********************************
**/

#include "bsp_iic.h"

/***********************************
                                 定义变量
***********************************/

#if __USER_System_Platform == 1  //ARM平台
GPIO_InitTypeDef GPIO_InitStructure;
#endif

/**
  ***********************************
  * @Name   : GPIO初始化
  *
  * @Brief  : STM32平台,其他平台请修改或者注释掉
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : none
  ***********************************
**/
void IIC_Init(void)
{
#if __USER_System_Platform == 1  //ARM平台

#if __CORTEX_M == 0x03  //Cortex-CM3
        
        RCC_APB2PeriphClockCmd(RCC_IIC_GPIOx, ENABLE);
        
        GPIO_InitStructure.GPIO_Pin   = SDA_Pin_x | SCL_Pin_x;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
        
#elif __CORTEX_M == 0x04  //Cortex-CM4
        
        RCC_AHB1PeriphClockCmd(RCC_IIC_GPIOx, ENABLE);
        
        GPIO_InitStructure.GPIO_Pin   = SDA_Pin_x | SCL_Pin_x;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        
#endif
        
        GPIO_Init(IIC_GPIOx, &GPIO_InitStructure);
        
        GPIO_SetBits(IIC_GPIOx, SDA_Pin_x | SCL_Pin_x);  //输出高电平
        
#else  //51平台
        
        IIC_SDA = 1;
        IIC_SCL = 1;
        
#endif
}

#if __USER_System_Platform == 1  //ARM平台
/**
  ***********************************
  * @Name   : GPIO输出方向
  *
  * @Brief  : none
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : none
  ***********************************
**/
void IIC_SDA_OUT(void)
{
#if __CORTEX_M == 0x03  //Cortex-CM3
        
        GPIO_InitStructure.GPIO_Pin   = SDA_Pin_x;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
        
#elif __CORTEX_M == 0x04  //Cortex-CM4
        
        GPIO_InitStructure.GPIO_Pin   = SDA_Pin_x;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        
#endif
        
        GPIO_Init(IIC_GPIOx, &GPIO_InitStructure);
}

/**
  ***********************************
  * @Name   : GPIO输入方向
  *
  * @Brief  : none
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : none
  ***********************************
**/
void IIC_SDA_IN(void)
{
#if __CORTEX_M == 0x03  //Cortex-CM3
        
        GPIO_InitStructure.GPIO_Pin   = SDA_Pin_x;
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
        
#elif __CORTEX_M == 0x04  //Cortex-CM4
        
        GPIO_InitStructure.GPIO_Pin   = SDA_Pin_x;
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        
#endif
        
        GPIO_Init(IIC_GPIOx, &GPIO_InitStructure);
}
#endif

/**
  ***********************************
  * @Name   : IIC启动
  *
  * @Brief  : SCL高电平期间,SDA由高电平突变到低电平时启动总线
  *           SCL: __________
  *                          \__________
  *           SDA: _____
  *                     \_______________
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : none
  ***********************************
**/
void IIC_Start(void)
{
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_OUT();        //设置成输出
#endif

        IIC_SDA = 1;        //为SDA下降启动做准备
        IIC_SCL = 1;        //在SCL高电平时,SDA为下降沿时候总线启动
        
#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */
        
        IIC_Delay();
        IIC_SDA = 0;        //突变,总线启动
        IIC_Delay();
        IIC_SCL = 0;
        IIC_Delay();

#else  /* 否则不使用延时函数改变通讯频率 */
        
        IIC_SDA = 0;        //突变,总线启动
        IIC_SCL = 0;

#endif  /* end __USER_DELAY_CLK */
}

/**
  ***********************************
  * @Name   : IIC停止
  *
  * @Brief  : SCL高电平期间,SDA由低电平突变到高电平时停止总线
  *           SCL: ____________________
  *                          __________
  *           SDA: _________/
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : none
  ***********************************
**/
void IIC_Stop(void)
{
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_OUT();        //设置成输出
#endif

        IIC_SDA = 0;        //为SDA上升做准备
        
#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */

        IIC_Delay();
        IIC_SCL = 1;        //在SCL高电平时,SDA为上升沿时候总线停止
        IIC_Delay();
        IIC_SDA = 1;        //突变,总线停止
        IIC_Delay();

#else  /* 否则不使用延时函数改变通讯频率 */

        IIC_SCL = 1;        //在SCL高电平时,SDA为上升沿时候总线停止
        IIC_SDA = 1;        //突变,总线停止

#endif  /* end __USER_DELAY_CLK */
}

/**
  ***********************************
  * @Name   : 主机向从机发送应答信号
  *
  * @Brief  : none
  *
  * @Input  : a:应答信号
  *           0:应答信号
  *           1:非应答信号
  *
  * @Output : none
  *
  * @Return : none
  ***********************************
**/
void IIC_Ack(u8 a)
{
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_OUT();        //设置成输出
#endif

        if(a)        IIC_SDA = 1;        //放上应答信号电平
        else        IIC_SDA = 0;
        
#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */

        IIC_Delay();
        IIC_SCL = 1;        //为SCL下降做准备
        IIC_Delay();
        IIC_SCL = 0;        //突变,将应答信号发送过去
        IIC_Delay();

#else  /* 否则不使用延时函数改变通讯频率 */

        IIC_SCL = 1;        //为SCL下降做准备
        IIC_SCL = 0;        //突变,将应答信号发送过去

#endif  /* end __USER_DELAY_CLK */
}

/**
  ***********************************
  * @Name   : 向IIC总线发送一个字节数据
  *
  * @Brief  : none
  *
  * @Input  : dat:要发送的数据
  *
  * @Output : none
  *
  * @Return : ack:返回应答信号
  ***********************************
**/
u8 IIC_Write_Byte(u8 dat)
{
        u8 i=0;
        u8 ErrTime=0;
//        u8 iic_ack=0;        //iic应答标志
        
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_OUT();        //设置成输出
#endif

        for(i = 0;i < 8;i++)
        {
                if(dat & 0x80)        IIC_SDA = 1;        //判断发送位,先发送高位
                else        IIC_SDA = 0;

#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */
                        
                IIC_Delay();
                IIC_SCL = 1;        //为SCL下降做准备
                IIC_Delay();
                IIC_SCL = 0;        //突变,将数据位发送过去
                dat<<=1;        //数据左移一位
        }        //字节发送完成,开始接收应答信号

        IIC_SDA = 1;        //释放数据线
        
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_IN();        //设置成输入
#endif
        
        IIC_Delay();
        IIC_SCL = 1;        //为SCL下降做准备
        IIC_Delay();

#else  /* 否则不使用延时函数改变通讯频率 */

                IIC_SCL = 1;        //为SCL下降做准备
                IIC_SCL = 0;        //突变,将数据位发送过去
                dat<<=1;        //数据左移一位
        }        //字节发送完成,开始接收应答信号

        IIC_SDA = 1;        //释放数据线
        
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_IN();        //设置成输入
#endif
        
        IIC_SCL = 1;        //为SCL下降做准备

#endif  /* end __USER_DELAY_CLK */
        
//        iic_ack |= IN_SDA;        //读入应答位
        while(IN_SDA)
        {
                ErrTime++;
                if(ErrTime > 230)
                {
                        IIC_Stop();
                        return 1;  //非应答
                }
        }
        IIC_SCL = 0;
        return 0;
//        return iic_ack;        //返回应答信号
}

/**
  ***********************************
  * @Name   : 从IIC总线上读取一个字节数据
  *
  * @Brief  : none
  *
  * @Input  : none
  *
  * @Output : none
  *
  * @Return : 读取到的数据
  ***********************************
**/
u8 IIC_Read_Byte(void)
{
        u8 i=0;
        u8 x=0;

        IIC_SDA = 1;        //首先置数据线为高电平
        
#if __USER_System_Platform == 1  //ARM平台
        IIC_SDA_IN();        //设置成输入
#endif
        
        for(i = 0;i < 8;i++)
        {
                x <<= 1;        //读入数据,高位在前

#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */

                IIC_Delay();
                IIC_SCL = 1;        //突变
                IIC_Delay();
               
                if(IN_SDA)        x |= 0x01;        //收到高电平

                IIC_SCL = 0;
                IIC_Delay();
        }        //数据接收完成

#else  /* 否则不使用延时函数改变通讯频率 */

                IIC_SCL = 1;        //突变
               
                if(IN_SDA)        x |= 0x01;        //收到高电平

                IIC_SCL = 0;
        }        //数据接收完成

#endif  /* end __USER_DELAY_CLK */

        IIC_SCL = 0;

        return x;        //返回读取到的数据
}
[/mw_shl_code]


自己看
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2015-12-28 11:04:54 | 显示全部楼层
换端口要移位。建议你搜搜IIC的帖子,前人有脚步的
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-12-28 11:29:12 | 显示全部楼层
如果你原本程式都不改 只要改端口
那變數名稱你也不能動

像是原本
#define SCL_OUT()

那你能動的是後面的參數{GPIOB->CRH&=0XFFF0FFFF;GPIOB->CRH|=3<<16;}

而不是你另外去宣告不同參數名稱

另外你要用兩組IIC模擬 變數名稱也要不同
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 11:47:28 | 显示全部楼层
Rocks 发表于 2015-12-28 11:29
如果你原本程式都不改 只要改端口
那變數名稱你也不能動

我就是把寄存器给移位了,原来有定义为IIC的GPIO口模拟的正常读数据,比如PB10,PB11,分别为IIC的SCK和SDA,换成其他的GPIO口就不能读了
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 11:51:42 | 显示全部楼层
本帖最后由 wtdwll1000 于 2015-12-28 11:53 编辑






















































回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-12-28 11:54:00 | 显示全部楼层
http://www.openedv.com/posts/list/17451.htm

同問

有些數值要跟著改動

暫存器操作看得我頭疼 你自己對照手冊吧
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 11:54:10 | 显示全部楼层

#include "myiic.h"
#include "Delay.h"

//3&#245;ê&#188;&#187;ˉIIC
void IIC_Init(void)
{                                             
        GPIO_InitTypeDef GPIO_InitStructure;       
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );               
        GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, DISABLE);       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}
//2úéúIIC&#198;eê&#188;D&#197;o&#197;
void IIC_Start(void)
{
        SDA_OUT();     //sda&#207;&#223;ê&#228;3&#246;
        IIC_SDA_SET;                    
        IIC_SCL_SET;
        Delay_us(4);
        IIC_SDA_CLR;//START:when CLK is high,DATA change from high to low
        Delay_us(4);
        IIC_SCL_CLR;//&#199;ˉ×&#161;I2C×ü&#207;&#223;£&#172;×&#188;±&#184;·¢&#203;í&#187;ò&#189;óê&#213;êy&#190;Y
}          
//2úéúIICí£&#214;1D&#197;o&#197;
void IIC_Stop(void)
{
        SDA_OUT();//sda&#207;&#223;ê&#228;3&#246;
        IIC_SCL_CLR;
        IIC_SDA_CLR;//STOP:when CLK is high DATA change form low to high
        Delay_us(4);
        IIC_SCL_SET;
        IIC_SDA_SET;//·¢&#203;íI2C×ü&#207;&#223;&#189;áê&#248;D&#197;o&#197;
        Delay_us(4);                                                                  
}
//μè′yó|′eD&#197;o&#197;μ&#189;à′
//·μ&#187;&#216;&#214;μ£o1£&#172;&#189;óê&#213;ó|′eê§°ü
//        0£&#172;&#189;óê&#213;ó|′e3é1|
u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
        SDA_IN();      //SDAéè&#214;&#195;&#206;aê&#228;è&#235;  
        IIC_SDA_SET;Delay_us(1);          
        IIC_SCL_SET;Delay_us(1);         
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL_CLR;//ê±&#214;óê&#228;3&#246;0           
        return 0;  
}
//2úéúACKó|′e
void IIC_Ack(void)
{
        IIC_SCL_CLR;
        SDA_OUT();
        IIC_SDA_CLR;
        Delay_us(100);
        IIC_SCL_SET;
        Delay_us(100);
        IIC_SCL_CLR;
        Delay_us(100);
}
//2&#187;2úéúACKó|′e                    
void IIC_NAck(void)
{
        IIC_SCL_CLR;
        SDA_OUT();
        IIC_SDA_SET;
        Delay_us(2);
        IIC_SCL_SET;
        Delay_us(2);
        IIC_SCL_CLR;
}                                                                              
//IIC·¢&#203;íò&#187;&#184;&#246;×&#214;&#189;ú
//·μ&#187;&#216;′ó&#187;úóD&#206;Tó|′e
//1£&#172;óDó|′e
//0£&#172;&#206;Tó|′e                          
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
        SDA_OUT();             
    IIC_SCL_CLR;//à-μíê±&#214;ó&#191;aê&#188;êy&#190;Y′&#171;ê&#228;
    for(t=0;t<8;t++)
    {              
        //IIC_SDA=(txd&0x80)>>7;
                if((txd&0x80)>>7)
                        IIC_SDA_SET;
                else
                        IIC_SDA_CLR;
                txd<<=1;           
                Delay_us(2);   //&#182;&#212;TEA5767&#213;aèy&#184;&#246;&#209;óê±&#182;&#188;ê&#199;±&#216;D&#235;μ&#196;
                IIC_SCL_SET;
                Delay_us(2);
                IIC_SCL_CLR;       
                Delay_us(2);
    }         
}             
//&#182;á1&#184;&#246;×&#214;&#189;ú£&#172;ack=1ê±£&#172;·¢&#203;íACK£&#172;ack=0£&#172;·¢&#203;ínACK   
u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        SDA_IN();//SDAéè&#214;&#195;&#206;aê&#228;è&#235;
        Delay_us(200);
    for(i=0;i<8;i++ )
        {
        IIC_SCL_CLR;
        Delay_us(200);
                                IIC_SCL_SET;
        receive<<=1;
        if(READ_SDA)
                    receive++;   
                Delay_us(100);
    }                                         
    if (!ack)
        IIC_NAck();//·¢&#203;ínACK
    else
        IIC_Ack(); //·¢&#203;íACK   
    return receive;
}

























回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2015-12-28 12:00:05 | 显示全部楼层
你不如把專案發上來吧 這程式碼有一段沒一段的很難看
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 12:07:30 | 显示全部楼层
Rocks 发表于 2015-12-28 12:00
你不如把專案發上來吧 這程式碼有一段沒一段的很難看

我最上面发的是直接改变GPIO,其他什么都没有改
回复

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1213
金钱
1213
注册时间
2011-4-9
在线时间
97 小时
发表于 2015-12-28 12:08:26 | 显示全部楼层
你的程序不全,修改端口后,后面的值也是要跟着改的,有可能有地方没有配套改,还有寄存器操作的,这个得对手册了,眼睛看不出来。
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1684
金钱
1684
注册时间
2014-2-25
在线时间
230 小时
发表于 2015-12-28 12:24:25 | 显示全部楼层
只需要修改两个地方:
1、是你的引脚输入输出宏定义;
2、是引脚初始化函数。
其他的不用修改。
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 14:01:32 | 显示全部楼层
1201yuge 发表于 2015-12-28 12:24
只需要修改两个地方:
1、是你的引脚输入输出宏定义;
2、是引脚初始化函数。

嗯嗯!我就是这么改的。我把SDA线换成PB13就直接可用。看了下芯片手册的引脚定义PB13就是SDA引脚。SDA引脚换成PB12就不行出来的数据全是FF
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 14:02:21 | 显示全部楼层
八度空间 发表于 2015-12-28 13:04
[mw_shl_code=applescript,true]/**
  ***********************************
  *                        ...

谢谢大神
回复

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2015-12-28
在线时间
29 小时
 楼主| 发表于 2015-12-28 17:23:16 | 显示全部楼层
谢谢大家的帮助
回复

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2019-4-25
在线时间
20 小时
发表于 2019-6-18 17:57:13 | 显示全部楼层
前人的脚步,,,看不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-9 08:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表