F103模拟IIC,SDA引脚配置

2019-07-21 07:22发布

官方例程,对于SDA的配置是通过寄存器,如下所示:
#define SDA_IN()  {GPIOC->CRH&=0XFFFFFF0F;GPIOC->CRH|=8<<4;}
#define SDA_OUT() {GPIOC->CRH&=0XFFFFFF0F;GPIOC->CRH|=3<<4;}

根据stm32的中文手册,可得:
在输入模式时,配置为上拉/下拉模式,在输出模式时,配置为通用推挽输出。程序可以正常运行。
如果利用库函数配置如下:
#define SDA_IN()  {GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOC, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(GPIOC, &GPIO_InitStructure);}        //PC9输入模式
#define SDA_OUT() { GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOC, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure);}        //PC9输出模式
程序无法正常运行,想请问一下具体的原因是什么?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
jandriux
1楼-- · 2019-07-21 12:32
找到原因了,库函数配置的时候没有设置GPIO的速度,增加GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;即可解决。
szczyb1314
2楼-- · 2019-07-21 14:36
试试上拉,不要下拉,IIC总线有上拉电阻的
jandriux
3楼-- · 2019-07-21 16:08
szczyb1314 发表于 2018-11-29 15:05
试试上拉,不要下拉,IIC总线有上拉电阻的

一开始就是设置的上拉,不行,后来改成下拉试了一下,这边忘记修改回来。
szczyb1314
4楼-- · 2019-07-21 17:13
jandriux 发表于 2018-11-29 15:14
一开始就是设置的上拉,不行,后来改成下拉试了一下,这边忘记修改回来。

你的总线上有上拉电阻吗?

一周热门 更多>