[新品上市] 【APM32F107VCT6 MINI开发板测评】AT24C04串口打印

[复制链接]
1393|14
 楼主| 比神乐 发表于 2023-3-18 10:39 | 显示全部楼层 |阅读模式
今天搞了一下AT24C04,模拟时序,串口一打印数值。
SCL:PC0;SDA:PC1.
原理图:
2.jpg


3.jpg
主程序代码:
  1. #include "main.h"
  2. #include "AT24Cxx.h"
  3. /** @addtogroup Examples
  4.   @{
  5. */



  6. //volatile bool txThresholdEventReceived = false;
  7. //volatile bool rxThresholdEventReceived = false;

  8. /** @addtogroup USART_Printf
  9.   @{
  10. */

  11. /** @addtogroup USART_Printf_Variables Variables
  12.   @{
  13. */

  14. volatile uint32_t tick = 0;
  15. u8 dt=0;
  16. u8 td=0;
  17.    
  18.    
  19. uint8_t txBuf1[] = "Read Adress0 Value = :   \r\n";
  20. uint8_t txBuf2[] = "Read Adress1 Value = :   \r\n";
  21. /**@} end of group USART_Printf_Variables */
  22. void DelayMs(uint16_t nms)
  23. {
  24.         uint16_t i,j;                  
  25.         for(i=0;i<nms;i++)
  26.        for(j=0;j<200;j++);
  27. }
  28. /** @addtogroup USART_Printf_Functions Functions
  29.   @{
  30. */
  31. void APM_MINI_GPIOInit(void)
  32. {
  33.     GPIO_Config_T  configStruct;

  34.     /* Enable the GPIO_LED Clock */
  35.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOE);

  36.     /* Configure the GPIO_LED pin */
  37.     configStruct.pin = GPIO_PIN_2;
  38.     configStruct.mode = GPIO_MODE_OUT_PP;
  39.     configStruct.speed = GPIO_SPEED_50MHz;

  40.     GPIO_Config(GPIOE, &configStruct);
  41.    
  42. }

  43. /*!
  44. * [url=home.php?mod=space&uid=247401]@brief[/url]       Main program
  45. *
  46. * @param       None
  47. *
  48. * @retval      None
  49. *
  50. */
  51. int main(void)
  52. {
  53.     uint8_t i;
  54.                 uint8_t bai,shi,ge;
  55.        
  56.     GPIO_Config_T GPIO_ConfigStruct;
  57.     USART_Config_T USART_ConfigStruct;

  58.     APM_MINI_LEDInit(LED2);
  59.                 APM_MINI_GPIOInit();
  60.     RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_USART1));

  61.     GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
  62.     GPIO_ConfigStruct.pin = GPIO_PIN_9;
  63.     GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
  64.     GPIO_Config(GPIOA, &GPIO_ConfigStruct);

  65.     USART_ConfigStruct.baudRate = 115200;
  66.     USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
  67.     USART_ConfigStruct.mode = USART_MODE_TX;
  68.     USART_ConfigStruct.parity = USART_PARITY_NONE;
  69.     USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
  70.     USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
  71.     USART_Config(USART1, &USART_ConfigStruct);

  72.     USART_Enable(USART1);

  73.     SysTick_Config(SystemCoreClock / 1000);
  74.                 I2C_Init();
  75.                 AT24Cxx_WriteOneByte(4,125);
  76.     AT24Cxx_WriteOneByte(5,238);
  77.     dt=AT24Cxx_ReadOneByte(4);
  78.     bai=dt/100+0x30;
  79.                 shi=dt%100/10+0x30;
  80.                 ge=dt%10+0x30;
  81.     txBuf1[22]=bai;
  82.                 txBuf1[23]=shi;
  83.     txBuf1[24]=ge;
  84.    
  85.                 for(i = 0; i < sizeof(txBuf1); i++)
  86.                 {
  87.                                 while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
  88.                                 USART_TxData(USART1, txBuf1[i]);
  89.                 }
  90.                 Delay();
  91.                 td=AT24Cxx_ReadOneByte(5);
  92.                 bai=td/100+0x30;
  93.                 shi=td%100/10+0x30;
  94.                 ge=td%10+0x30;
  95.     txBuf2[22]=bai;
  96.                 txBuf2[23]=shi;
  97.     txBuf2[24]=ge;
  98.                 for(i = 0; i < sizeof(txBuf2); i++)
  99.                 {
  100.                                 while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
  101.                                 USART_TxData(USART1, txBuf2[i]);
  102.                 }
  103.     while(1)
  104.     {

  105.                                
  106.                                                 Delay();
  107.                                

  108.         APM_MINI_LEDToggle(LED2);
  109.                                
  110.     }
  111. }

  112. /*!
  113. * @brief       Delay
  114. *
  115. * @param       None
  116. *
  117. * @retval      None
  118. *
  119. */
  120. void Delay(void)
  121. {
  122.     tick = 0;

  123.     while(tick < 500);
  124. }

AT24C04.C:
  1. #include "I2C.h"

  2. #define AT24Cxx_Address  0xA0
  3. /**********************************************************************************************************
  4. *   函 数 名: AT24Cxx_ReadOneByte
  5. *   功能说明: AT24Cxx_ReadOneByte读一个字节
  6. *   形    参:无
  7. *   返 回 值: 无
  8. **********************************************************************************************************/
  9. u8 AT24Cxx_ReadOneByte(u8 addr)
  10. {
  11.     u8 temp=0;

  12.     I2C_Start();
  13.    
  14.    
  15.    
  16.     I2C_Send_Byte(AT24Cxx_Address);//器件地址+数据地址
  17.    

  18.     I2C_Wait_Ack();
  19.     I2C_Send_Byte(addr);//双字节是数据地址低位               
  20.                                                     //单字节是数据地址低位
  21.     I2C_Wait_Ack();

  22.     I2C_Start();
  23.     I2C_Send_Byte(AT24Cxx_Address+1);
  24.     I2C_Wait_Ack();

  25.     temp=I2C_Read_Byte(0); //  0   代表 NACK
  26.     I2C_Stop();
  27.    
  28.     return temp;       
  29. }

  30. /**********************************************************************************************************
  31. *   函 数 名: AT24Cxx_WriteOneByte
  32. *   功能说明: AT24Cxx_WriteOneByte  写一个字节
  33. *   形    参:无
  34. *   返 回 值: 无
  35. **********************************************************************************************************/
  36. void AT24Cxx_WriteOneByte(u8 addr,u8 dt)
  37. {
  38.     I2C_Start();

  39.    
  40.     I2C_Send_Byte(AT24Cxx_Address);//器件地址+数据地址
  41.    

  42.     I2C_Wait_Ack();
  43.     I2C_Send_Byte(addr);//双字节是数据地址低位               
  44.                                                     //单字节是数据地址低位
  45.     I2C_Wait_Ack();

  46.     I2C_Send_Byte(dt);
  47.     I2C_Wait_Ack();
  48.     I2C_Stop();

  49.     delay_ms(50);
  50. }
效果图:
0.jpg 1.jpg
claretttt 发表于 2023-5-11 17:42 | 显示全部楼层
内置的eeprom如何使用               
 楼主| 比神乐 发表于 2023-5-11 17:51 | 显示全部楼层
claretttt 发表于 2023-5-11 17:42
内置的eeprom如何使用

没用过
febgxu 发表于 2023-5-11 18:44 | 显示全部楼层
内部有没有可以用来存储数据的EEPROM
sanfuzi 发表于 2023-5-11 19:05 | 显示全部楼层
AT24C04 eeprom 可写多少次
 楼主| 比神乐 发表于 2023-5-11 19:29 | 显示全部楼层
sanfuzi 发表于 2023-5-11 19:05
AT24C04 eeprom 可写多少次

至少上万次吧,甚至几十万次。
plsbackup 发表于 2023-5-11 19:53 | 显示全部楼层
APM32F107VCT6 的FLASH能用来做eeprom吗?
saservice 发表于 2023-5-11 20:13 | 显示全部楼层
【APM32低功耗系列都有小量EEPROM吗?
modesty3jonah 发表于 2023-5-11 20:32 | 显示全部楼层
flash可以模拟eeprom
timfordlare 发表于 2023-5-11 20:58 | 显示全部楼层
如何使用APM32F107VCT6的Flash来模拟eeprom
geraldbetty 发表于 2023-5-11 21:04 | 显示全部楼层
在初始化读取at24c256的eeprom时候会卡死怎么处理
albertaabbot 发表于 2023-5-11 21:10 | 显示全部楼层
EEPROM或者相关掉电存储功能么
pentruman 发表于 2023-5-11 21:16 | 显示全部楼层
如何使用备份SRAM               
i1mcu 发表于 2023-5-11 21:29 | 显示全部楼层
APM32F107VCT6 是否有片内eeprom
 楼主| 比神乐 发表于 2023-5-12 00:06 | 显示全部楼层
i1mcu 发表于 2023-5-11 21:29
APM32F107VCT6 是否有片内eeprom

不清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

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