主时钟频率改变后,iic不能用了,

2019-07-21 04:35发布

/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
// #define SYSCLK_FREQ_24MHz  24000000
// #define SYSCLK_FREQ_36MHz  36000000
// #define SYSCLK_FREQ_48MHz  48000000
//#define SYSCLK_FREQ_56MHz  56000000
#define SYSCLK_FREQ_72MHz  72000000

在主程序中,这样设置72M的话,iic就能正常使用,应答信号等都正常,只要改成36M
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
// #define SYSCLK_FREQ_24MHz  24000000
#define SYSCLK_FREQ_36MHz  36000000
// #define SYSCLK_FREQ_48MHz  48000000
//#define SYSCLK_FREQ_56MHz  56000000
//#define SYSCLK_FREQ_72MHz  72000000

IIC就不能正常运行了,应答信号都不对,请问是什么原因,

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
shmilyzgc
1楼-- · 2019-07-23 16:25
操作系统 发表于 2018-3-8 15:22
你查一下STM8S的PDF.所有的型号I2C引脚内置默认开漏结构.
这也是为什么I2C总线的IO口.要求设置开漏的节 ...

改了,,测试还是一样,,24M的时候能工作,8M的时候就不行了。如果是10K的电阻的话就只能72M。。
互利共赢
2楼-- · 2019-07-23 18:40
第一:电阻的数值,不是随便选的,由OD口的电流决定最小电阻值,最大值的确定比较复杂,受PCB布线、总线设备个数的影响,说到底是电阻、电容的关系会导致SCL时钟跳变的速度,我们有深究,有兴趣可以研究一下;可以研究一下IIC协议规范中“The number of ICs that can be connected to the same bus is limited only by a maximum bus capacitance of 400 pF. ”
第二:IIC通信,就算它遇到再大的问题,只要你有一个差不多的示波器,或是逻辑分析仪,找到波形,对照协议的时序,药到病除;
第三:为什么你们都不用硬件IIC,尝试一下吧,不要被网上的说不好用,有bug而直接选择放弃,耳听为虚,手操为实;另外,在你理解STM32F系列的硬件IIC工作逻辑时,也是你深入理解IIC协议的良药;
互利共赢
3楼-- · 2019-07-23 20:42
补充一下:看你的程序是操作adxl345芯片,那还要仔细分析该芯片的属性参数,来确定问题到底在哪里,不要想看从设备,因为主从要通信,必须合拍才可以!简单举例:常用的AT24CXX系列eeprom操作,如果你发送一帧数据后,stop;接着直接再去读,那是读不出来的,原因是eep内部有一个写存储阵列时间,详细自己研究datasheet;
Neu_Andy
4楼-- · 2019-07-24 00:14
 精彩回答 2  元偷偷看……

一周热门 更多>