[活动专区] 【杰发科技AC7802x测评】5,通过例程硬件驱动OLED

[复制链接]
 楼主| ddllxxrr 发表于 2023-8-29 06:27 | 显示全部楼层 |阅读模式
<
本帖最后由 ddllxxrr 于 2023-8-29 18:48 编辑

杰发的IIC给我一个小震动,也是对我IIC知识的弥补,我一直以为IIC是没有时间要求的(当然太长不行)。
所以我以前一直是管脚驱动,而且在SCLK拉低期间,我想拉多长就拉多和,这时再变SDAT。反正我就是这么就的。也是这么认为的。
但杰发的例程居然要计算速率。

下边是模块原理图:

AC6.jpg

可以看到有收和发两个硬件组成。

打开例程第一个,I2Cmasterpolling那个,管脚都定义好了,只要把OLED驱动部分加入就行了。尔这部分网上到处都是。
以下是初始化部分,根本不用改:
  1. oid I2C0_Init(void)
  2. {
  3.     I2C_ConfigType i2cConfig;

  4.     /*ÇåÁã½á¹¹Ìå±äÁ¿.*/
  5.     memset(&i2cConfig, 0x00, sizeof(i2cConfig));

  6.     /*³õʼ»¯Òý½Å¹¦ÄÜΪI2C.*/
  7.     GPIO_SetFunc(I2C0_SCL_PORT, I2C0_SCL_PIN, GPIO_FUN3);
  8.     GPIO_SetFunc(I2C0_SDA_PORT, I2C0_SDA_PIN, GPIO_FUN3);

  9.     /*ÎÞÂÛÊÇÖ÷»ú»¹ÊÇ´Ó»úģʽ¶¼ÐèÒªÅäÖõIJÎÊý.*/
  10.     i2cConfig.mode              = I2C_MASTER;    /*ÉèÖÃÖ÷»úģʽ.*/
  11.     i2cConfig.extAddrEn         = DISABLE;       /*10bitÀ©Õ¹µØÖ·½ûÄÜ.*/
  12.     i2cConfig.interruptEn       = DISABLE;       /*I2CÖжÏ,BND/SAMF/ARBLOST.*/
  13.     i2cConfig.nackInterruptEn   = DISABLE;       /*NACKÖжÏ.*/
  14.     i2cConfig.ssInterruptEn     = DISABLE;       /*×ÜÏßstart»òstopÖжÏ.*/
  15.     i2cConfig.i2cEn             = ENABLE;        /*ʹÄÜÄ£¿é.*/
  16.     i2cConfig.callBack          = NULL;          /*Öжϻص÷º¯Êý.*/

  17.     /*Ö÷»úģʽÐèÒªÅäÖõIJÎÊý,ÅäÖóɴӻúģʽ¿ÉºöÂÔ.*/
  18.     /*²¨ÌØÂÊÉèÖÃ
  19.     f = APBʱÖÓ/((sampleCnt+1)*(stepCnt+1)*2)
  20.     µ±APBʱÖÓΪ24M£¬ËùÐè²¨ÌØÂÊΪ100Kbps
  21.     ¿ÉÅäÖðëÂö³å¿í¶ÈstepCntΪ7£¬Ã¿¸ö²ÉÑùµã¿í¶ÈsampleCntΪ9
  22.     Ôò²¨ÌØÂÊ = 16M/((9+1)*(7+1)*2) = 100K
  23.     */

  24.     i2cConfig.masterConfig.sampleCnt = 7;        /*ÉèÖò¨ÌØÂÊΪ100Kbps,bandrate=(16M/(10*8*2))=100Kbps.*/
  25.     i2cConfig.masterConfig.stepCnt   = 9;
  26.     i2cConfig.masterConfig.ARBEn     = ENABLE;   /*ÉèÖÃÖ÷»úÖٲù¦ÄÜ.*/
  27.     i2cConfig.masterConfig.SYNCEn    = ENABLE;   /*ÉèÖÃÖ÷»úSCLͬ²½¹¦ÄÜ.*/

  28.     I2C_Init(I2C0, &i2cConfig);
  29. }
运得结果在这里放吧,不知怎么了,本来我早晨发贴子,图片就是上不去,也不知道是哪边的事 微信图片_20230829061800.jpg
微信图片_20230829061836.jpg
主函数部分:
  1. int main(void)
  2. {
  3.     InitDelay();
  4.     InitDebug();

  5.     printf("I2C0 Polling  Master Test\r\n");

  6.     I2C0_Init();

  7.           OLED_Init();
  8.           OLED_Clear();
  9.            OLED_ShowString(16,1, (const uint8_t*)"Hello AC!!!!",16,0);
  10.           OLED_Refresh_Gram();
  11.           OLED_Fill(0,0,128,64,1);
  12.           OLED_ShowString(16,1, (const uint8_t*)"Hello AC!!!!",16,0);
  13.           OLED_Refresh_Gram();
  14.     while (1)
  15.     {
  16. //        mdelay(1000);
  17. //        I2C0_SendData();
  18.     }
  19. }

guoyt 发表于 2023-8-29 19:53 | 显示全部楼层
后来解决了吗
 楼主| ddllxxrr 发表于 2023-8-29 21:31 | 显示全部楼层

解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

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