你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 5190|回复: 1

I2C1 卡死在 RXNE 旗標(0x40)

[复制链接]

2

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-3-5 14:36:13 | 显示全部楼层 |阅读模式
 我們目前正開發 STM32的應用
觸控元件為 STMPE610 
PB5_I2C1_nINT0 連接 STMPE610 的INT接腳
PB6_I2C1_SCL 連接 STMPE610 的SCLK接腳
PB7_I2C1_SDA  連接 STMPE610 的 SDAT接腳
 
 
<div style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; color: rgb(34, 34, 34); font-family: Arial, Helvetica, sans-serif; font-size: 13px;">初始化後,我們嘗試透過 I2C 去讀 STMPE610的暫存器,竟然卡住:
>
 
I2C_AcknowledgeConfig(I2C1, ENABLE);
       
while (I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
 
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)); SR1 = 0x40 (I2C_FLAG_RXNE), I2C1->SR2 = 0
 
我們查到在stackOverflow也有人遇到類似的問題,但不知如何解:
http://stackoverflow.com/questions/2556794/stm32-i2c1-start-bit-not-set-on-sr1-register

 
 
初始化的程式碼:
 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

 
GPIO_InitTypeDef  GPIO_InitStructure;
 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;        //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);

 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
 
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;        //EXTI9_5_IRQn; // EXTI Line[9:5] Interrupts
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
 
EXTI_InitSturcture.EXTI_Line = EXTI_Line5 ;
EXTI_InitSturcture.EXTI_Mode = EXTI_Mode_Interrupt ;
EXTI_InitSturcture.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitSturcture.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitSturcture);
 
// Select PB5 as EXTI Line 5
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource5);

 
 
 
 
GPIO_InitTypeDef  GPIO_InitStructure;
 
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;                    
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;                                               
GPIO_Init(GPIOB, &GPIO_InitStructure);       

 
 
I2C_InitTypeDef I2C_InitStructure;

I2C_DeInit(I2C1);
I2C_SoftwareResetCmd(I2C1, ENABLE);
I2C_SoftwareResetCmd(I2C1, DISABLE);
 
I2C_Cmd(I2C1, ENABLE);
       
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit ;
I2C_InitStructure.I2C_ClockSpeed = 50000;
I2C_Init(I2C1, &I2C_InitStructure);
 
I2C_ITConfig(I2C1, I2C_IT_BUF | I2C_IT_EVT, ENABLE);

 
 
請各位大大提供建議,謝謝!!
 
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2013-3-6 14:15:28 | 显示全部楼层

RE:I2C1 卡死在 RXNE 旗標(0x40)

建议用模拟I2C。
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版