官方例程,对于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输出模式
程序无法正常运行,想请问一下具体的原因是什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你的总线上有上拉电阻吗?
一周热门 更多>