[STM32F1] stm 32 iic 死了 帮忙看看问题

[复制链接]
3296|20
 楼主| 1136632326 发表于 2014-4-16 22:56 | 显示全部楼层 |阅读模式
iic, STM, EMI, ck, ni
#include "stm32f10x.h"

int main(void)
{   
  SystemInit();// clock
        RCC->APB2ENR|=1<<14; //enable usart1
        RCC->APB2ENR|=1<<2; //enable gpioa
        RCC->APB1ENR|=1<<21; //enable iic
        RCC->APB2ENR|=1<<3; //enable gpiob
        GPIOA->CRH|=0X000008B0;
        GPIOB->CRL|=0Xff000000;
        USART1->SR|=1<<13;
        USART1->BRR=0X1D4A;
        RCC->APB1RSTR  |= 1<<21;      
        RCC->APB1RSTR  &= ~(1<<21);   

       
        I2C1->CR2|=8;
        I2C1->CCR|=4;
        I2C1->TRISE|=9;
        I2C1->CR1|=(1<<10+1<<6);
        I2C1->CR2|=1<<10;       
        I2C1->CR2|=1<<9;
        I2C1->CR2|=1<<8;       
        I2C1->OAR1|=1<<14;
        I2C1->CR1|=1;
       
       
        while(1)
        {
                I2C1->CR1|=1<<8; //start
    while(!(I2C1->SR1&1)) //start sb
                {}
                I2C1->DR=0XA0; //write address
                while(!(I2C1 -> SR1&2))
                {}
               
                        I2C1->DR=0XA0;
               


               
       
               
        }
               


}



没有中断
 楼主| 1136632326 发表于 2014-4-16 22:57 | 显示全部楼层
iic就死在了  while(!(I2C1 -> SR1&2))
 楼主| 1136632326 发表于 2014-4-16 23:15 来自手机 | 显示全部楼层
大神帮忙看看  小弟感激不尽。。。代码的可读性不是太好。。。今天时间太晚了没顾得上添加注释,就快熄灯了。。
 楼主| 1136632326 发表于 2014-4-16 23:16 来自手机 | 显示全部楼层
这是测试代码… 以后的还没有写。。。
 楼主| 1136632326 发表于 2014-4-16 23:17 来自手机 | 显示全部楼层
老大们。。。帮帮我。。。我困扰了很长时间
 楼主| 1136632326 发表于 2014-4-16 23:21 来自手机 | 显示全部楼层
老大们。我是不是配置的有问题??
 楼主| 1136632326 发表于 2014-4-16 23:22 来自手机 | 显示全部楼层
坛友们。大家用过iic的说说感言吧…
 楼主| 1136632326 发表于 2014-4-16 23:32 来自手机 | 显示全部楼层
程序只写了一部分,一步一步调试的写的。。。
 楼主| 1136632326 发表于 2014-4-17 13:20 | 显示全部楼层
大家帮个帮啊


 楼主| 1136632326 发表于 2014-4-17 13:21 | 显示全部楼层
难道真的要悬赏才能解决?、
xkxxzw 发表于 2014-4-17 14:11 | 显示全部楼层
用官方的固件库吧,STM32 的IIC不太好用,直接操作寄存器,你会想哭的。。
elec921 发表于 2014-4-17 14:46 | 显示全部楼层
设置一个超时计数器,超时不响应则复位IIC,重启通信
anybody 发表于 2014-4-17 15:26 | 显示全部楼层
ST的I2C不能单步调试,否则可能会影响状态寄存器SR1和SR2的某些位。我调的时候都是用个变量存储SR1和SR2的寄存器值
,然后用串口打印出来调的。按照ST给的Reference Manual的时序测试没问题,但单步调试会有问题。
Marco-Marco 发表于 2014-4-17 16:07 | 显示全部楼层
逻辑分析仪看波形是最直接的。看有没有应答
free_90 发表于 2014-4-17 18:01 | 显示全部楼层
最好不要单步调试看寄存器的值,单步很可能影响正常的通信,用官方的固件库也会的,我就发生过这种情况,最好全部配置好了试试
ddb_21ic 发表于 2014-4-17 18:29 | 显示全部楼层
通常,数据量都不大,用软件模拟更简单
soso 发表于 2014-4-17 19:22 | 显示全部楼层
ttttttttttttttttttttt
dawei360 发表于 2014-4-17 22:24 | 显示全部楼层
我觉得IIC 最好是通过示波器来调,看波形,看ACK
2545958269 发表于 2014-4-17 23:30 | 显示全部楼层
不是一直说STM32 IIC 有问题吗,多开几个中断的话好像就时序出问题了
smail_sam_chen 发表于 2014-4-18 13:31 | 显示全部楼层
建议还是用模拟的吧,我上次用官方的库函数搞了一个,跑两下就挂掉了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

25

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部