首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STM32F030F4没有在裸金属中正确启动I2C1

STM32F030F4没有在裸金属中正确启动I2C1
EN

Stack Overflow用户
提问于 2019-02-09 07:12:07
回答 2查看 189关注 0票数 1

STM32F030F4没有正确启动I2C1。这是我的密码:

代码语言:javascript
运行
复制
//Clocks------------------------------------------------
    RCC->AHBENR  = 0x200000;
    RCC->APB1ENR = 0x4040 ; 
//------------------------------------------------------    

//GPIO-------------------------------------------------- 
//Configure Alternate Fucntion GPIO to I2C1
    GPIOA->AFR[1]  = 0x440  //(0b0100)<<4 | (0b0100)<<8 //AF4;
//Set GPIOA Pin 9-10 as Alternate Function
    GPIOA->MODER   = 0x280000;
//Set GPIOA pin 9-10 as speed as High
    GPIOA->OSPEEDR = 0x3c0000; 
//Set GPIOA pin 9-10 as open drain
    GPIOA->OTYPER  = 0x600;
//Set GPIOA pin 9-10 as no Pull-up Pull-down
    GPIOA->PUPDR   = 0x0;
//------------------------------------------------------

//I2C Resgisters
    I2C1->TIMINGR = 0x00201D2D;
    I2C1->CR1     = 0x1;
    I2C1->CR2           = 0x307001c;
    I2C1->TXDR      = 0x111;        
    //Start I2C 
    I2C1->CR2 |= (0b1) << 13;

但产出不是真的。它是这样的:

SDA端口不工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-09 16:50:16

问题解决了..。

时钟是有问题的:变化:

代码语言:javascript
运行
复制
//Enable PORTA clocks
RCC->AHBENR  |= 0x20000;

//Enable I2C1 clocks
RCC->APB1ENR |= 0x200000 ;

)

票数 0
EN

Stack Overflow用户

发布于 2019-02-09 08:57:41

这句话似乎有问题。

代码语言:javascript
运行
复制
GPIOA->AFR[1]  = GPIO_Aternate_Function_I2C1;

如果AFSEL9引脚为9和10,则应设置I2C和I2C值,但应设置AFSEL8 (在AFR1中最低),并清除其他引脚。

这段代码应该是这样的:

代码语言:javascript
运行
复制
GPIOA->AFR[1]  = GPIO_Aternate_Function_I2C1 * 0x00000110;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54604073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档