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

【经验分享】STM32实例-I2C-EEPROM 实验⑧-主函数

[复制链接]
STMCU小助手 发布时间:2022-6-27 10:35
    编写好 I2C 和 AT24CXX驱动函数后, 接下来就可以编写主函数了, 代码如下:
  1. /****************************************************************
    * u- r/ g, ?+ y# N
  2. * 函 数 名 : main7 X, n; l  k8 U2 v
  3. * 函数功能 : 主函数% e0 h; \. ^- y5 e3 ?/ S
  4. * 输 入 : 无
    + i: t% h. A. r3 H* w% k
  5. * 输 出 : 无! v$ k1 a  Q7 E5 e' k! W
  6. *****************************************************************/: ?, q7 _0 }( ^$ P; U) X
  7. int main()
    8 u6 m3 _' Z- p
  8. {! O2 q5 U, i3 n/ N  `# z
  9. u8 i=0;
    7 c* a. G2 M4 P# \5 _% Q7 O) ~
  10. u8 key;- F/ F* e/ K6 W, t- }) g  p1 Y8 [
  11. u8 k=0;) D- M0 _' o+ ^  M4 c# v
  12. SysTick_Init(72);2 G( ^4 d$ ]+ k& |
  13. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2 组5 X: D8 \2 `# ^) d; d8 _/ z! r
  14. LED_Init();) R+ u+ I: s9 {% y
  15. USART1_Init(9600);4 v! Q: h, \: q+ ~7 ^$ z
  16. KEY_Init();
    6 J- k, X; e+ c' E
  17. AT24CXX_Init();! T2 c: I' z9 i; j8 N- K7 D
  18. while(AT24CXX_Check()) //检测 AT24C02 是否正常: }. c  X, j5 a2 V3 c/ e* v) N
  19. {  A6 l- M8 p( Z8 G" k
  20. printf("AT24C02检测不正常!\r\n");# m, U$ D% M* Q. ~. t; j
  21. delay_ms(500);
    ( z# R8 q+ p" o  {, t* W5 f+ {
  22. }+ |; V' A7 z$ L
  23. printf("AT24C02检测正常!\r\n");
    9 M1 R8 O$ V6 c+ _" a
  24. while(1). ~) v( D" S- x4 q  P1 m
  25. {
    4 x- w8 d; N1 e6 M" n
  26. key=KEY_Scan(0);# e  `. Q- D# [' [% ~% r
  27. if(key==KEY_UP)
    8 \+ f  \8 r8 J+ c1 o
  28. {9 X  n. W! w8 Z: t1 `. S
  29. k++;
    # k% f8 W* f% p0 W
  30. if(k>255)" u% ^9 ?% g. o, L
  31. {
    . b% i% B- a% _% \( ]
  32. k=255;
    / z" ?! S/ l9 R) g7 F- o
  33. }3 L* V6 M5 y  U
  34. AT24CXX_WriteOneByte(0,k);: V" b! Y2 Z! L
  35. printf("写入的数据是:%d\r\n",k);4 k  f- Y* H5 F* ]
  36. }# L* Q  u6 D" x7 D: }" \
  37. if(key==KEY_DOWN)& X  F8 R' U0 r" M; y) P
  38. {* C& [: J+ W( ~, t; `
  39. k=AT24CXX_ReadOneByte(0);) h6 O6 Y% C* m  {- E0 b- X
  40. printf("读取的数据是:%d\r\n",k);
    5 O0 ^  b, E0 b; }/ _
  41. }
    . K, G. i+ l8 \, P
  42. i++;
    % ~5 j: [; s* V' H
  43. if(i%20==0)
    * ~; B; n: f$ e. o
  44. {
    " L* `: z6 y8 d+ l! \' e; Y6 t
  45. led1=!led1;$ m' Z3 a2 {  F" B/ Z
  46. }5 [8 ^8 y7 p: c. v0 g7 p5 |
  47. delay_ms(10);. [- |7 q: P* E# g
  48. }# T" W& x' h# [% H/ S$ P
  49. }
复制代码

5 H# s5 i% m  D1 \) ?
    主函数实现的功能很简单,首先调用之前编写好的硬件初始化函数,包括
SysTick 系统时钟,中断分组,LED 初始化等。然后调用我们前面编写的AT24CXX_Init 函数初始化 I2C 端口,接着调用 AT24CXX_Check 函数检测是否存在 AT24CXX 芯片,如果芯片存在就会输出“AT24C02 检测正常!”信息。最后进入 while 循环,调用KEY_Scan 函数,不断检测 K_UP 和 K_DOWN 按键是否按下,如果 K_UP 按键按下,将变量 k 值加 1 写入到 24C02 的地址0 内,并通过打印输出写入的值;当 K_OWN 按键按下,将 24C02 的地址 0 内数据读取出来保存到变量k 中,并通过打印输出读取的值。整个过程中 D1 指示灯会间隔 200ms 闪烁,提示系统正常运行。
. Q) Q. g4 s, k% H4 i( y
实验现象
    将工程程序编译后下载到开发板内,串口会输出 AT24C02 检测正常信息,同时可以看到 D1 指示灯不断闪烁,表示程序正常运行。当按下 K_UP 按键后,将数据写入到 24C02 芯片内,同时串口打印输出写入的值;当按下 K_DOWN 按键后,读取 24C02 芯片内的值,同时串口打印输出读取的值。如果想在串口调试助手上看到输出信息, 可以打开 “串口调试助手” ,首先勾选下标号 1 DTR 框,然后再取消勾选。这是因为此串口助手启动时会把系统复位住,通过 DTR 状态切换下即可。然后设置好波特率等参数后,串口助手上即会收到串口发送过来的信息。(串口助手上先勾选下标号1 DTR 框,然后再取消勾选)如下图所示:
' d% }  B5 K8 t( k0 r0 b  Q
. r# |  t3 Z- v' Q3 d
: W  H; M3 T  m. r; O
微信图片_20220627103502.png
3 ^4 x3 O  c. j9 @3 {6 \- d; u
    实验说明:用户需要将 COM3 模块上的 P232 端子短接到IIC2 端,否则无法显示此功能,这个在硬件电路已经说过。开发板出厂默认已经短接到 IIC2 上,如下:

1 h4 P8 l( u- U% m6 l
微信图片_20220627103459.png

8 G" Y+ z5 ?0 C* Q
    存储在 24C02(EEPROM)芯片内的值,掉电时都不会丢失。大家可以使用一个短接片将对应的 IIC 模拟 IO 口短接,重启下系统,这个时候就会看到初始化时会报“AT24C02 检测不正常!”(注意还是要按照前面操作串口助手的方法才能看到)。

, k/ m* g$ L+ N; \/ z0 x
赞 收藏 评论0 发布时间:2022-6-27 10:35

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版