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

记录学习STM8S中遇到的问题和过程....

[复制链接]
sincomaster 发布时间:2018-8-3 17:54
本帖最后由 sincomaster 于 2018-8-3 18:03 编辑
. S+ e" ^0 V- V, Y) k9 f
# ]; a. \' W3 S5 _1 V4 \+ d近段时间才学完C语言,现在开始学习单片机.
8 b' D) [/ }4 A: U! E9 W在这贴子分享学习过程和遇见的问题,有什么不对的地方还请多指教.
" A) n2 z' p  U0 q& z& Z. V, @开发板:STM8S DEV BOARD(自己做的)7 F+ R$ u7 [9 q
主控:STM8S207CBT6; i( D8 ?) ~2 n# d0 u* ]8 b
显示:OLED(SSD1306),支持IIC和SPI两种接口# v' ?8 C. q4 X) T8 B$ b0 g
按键:TTP223-TOUCH KEY+3X4矩阵按键(原理图设计有误,使1.5.9键值相同)- d/ t7 V* @9 E7 a3 s8 t
接口:含24L01无线接口,红外接口,18B20接口
/ `, K1 h/ d7 b% O6 p电源:UCB5V供电,支持输出5V和3.3V/ Y8 ^* i0 S9 b+ ~9 R9 A
指示:GPIOB外接8个LED灯
, t4 P, h( r) D  ~& T语音:板上有语音电路+ f+ [3 Q) k4 ?" O. m
音频:喇叭和蜂鸣器
- z5 |5 Y# N+ E7 z8 X7 r晶振:HSE(16MHz)
2 X+ |% K1 V" }, T4 ?时钟:HYM8563
1 n3 d8 U! h/ _( R: U# [0 ^存储:AT24C64D  y' X) |' }; z! Z; d" x+ _
字库:GT20L16S1Y
( H& _+ Q. a6 x
收藏 评论15 发布时间:2018-8-3 17:54

举报

15个回答
sincomaster 回答时间:2018-8-3 17:56:33
本帖最后由 sincomaster 于 2018-8-3 17:57 编辑 9 v& k2 Q" u7 c% Q3 n
+ b* c% e  t- [0 F" v2 e
这是自已做的开发板:* x; y! B1 C# c

: l/ A' z: V! M1 F# v; L7 E& y
124149gs0hel3s1lh0a1k4.jpg
124155mb2fze7ckofq8eit.jpg
124232m36hgsvwv3wpduuh.jpg
124304lur552lp0j5w3ilr.jpg
124348ef1y922yneqfezyn.jpg
124432k5kdallxln56jn5n.jpg
七哥 回答时间:2018-8-3 19:35:40
板很漂亮
sincomaster 回答时间:2018-8-4 10:16:37
本帖最后由 sincomaster 于 2018-8-4 10:25 编辑
3 {7 z7 a  @5 ]0 g& l# n, D' H
$ I# c  e; Z5 X$ a) A0 S# A& BSTM8S的延时程序用示波器测试了一下,和自已算出来的有误差,今天测试和前两的时间有一点点差,不知是不是我切换到外部时钟的原因,数据手册上说的1/2周期指令不清楚是算多少,我是按1周期指令来算的,
5 C9 _1 {: R0 F5 r网上也有说16M时钟算出来有差,但8M时钟不会差,我没去试
. l+ [$ A3 B- i# t1 D还有就是5us延时是,IO推挽输出波形较好,用开漏PE1输出上升沿很慢,不清楚是否正常,PE1外部上拉4.7K.
! e) c7 O' a1 ]" c! l) ]' }8 v" t
9 P$ k" `# B& Q

1ms

1ms

5us

5us

PE1的5us上升沿

PE1的5us上升沿

10ms

10ms

50us

50us

500us

500us
2018-08-04_101242.jpg
sincomaster 回答时间:2018-8-5 00:43:38
现在在写IIC驱动程序,可开发板做好了大家都说STM8S的硬件IIC有问题(中奖了,开发板用的就是硬件IIC)伤心呀!祝好运能早日写好测试
zero99 回答时间:2018-8-7 09:20:13
给楼主点个赞
csg123 回答时间:2018-8-12 15:44:58
sincomaster 发表于 2018-8-3 17:56
' w7 {3 u; d* l, S/ `2 J& x这是自已做的开发板:

3 a6 E. |# X" S4 ^. }5 g# }板很漂亮
sincomaster 回答时间:2018-8-12 23:55:47
本帖最后由 sincomaster 于 2018-8-12 23:58 编辑 ; ~: e- ^& i) I9 ]& T) @7 {
6 ^5 Y# C. ?9 f
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要给我到时传上来,
# V' a" `2 k# F: ?; ?3 j
20180812_233703.jpg
2018-08-12_235230.jpg
2018-08-12_235150.jpg
iyumi 回答时间:2018-8-16 17:25:46
本帖最后由 iyumi 于 2018-8-16 17:27 编辑 1 r3 k6 J% F. D, Q" m9 w9 k
sincomaster 发表于 2018-8-12 23:55
3 X/ d( R; w, b, `* e% ]经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要 ...
! L7 g7 ^& p( f% b4 L
楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
: |3 P% Q4 n8 P4 c6 K) Z
6 i; O  r3 J8 m7 }4 Z另外你遇到的问题能不能传上来,我学习借鉴一下,先谢谢了
8 Y9 t! R8 Q# I% D; V
sincomaster 回答时间:2018-8-17 17:13:17
iyumi 发表于 2018-8-16 17:25
9 d! z5 @# z/ \" ]: `3 E9 Y楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
1 N" z4 S7 D! m% P
( [! ^( K% v2 ^3 w0 J6 W另外你遇到的 ...

2 N- k8 g  P% {6 B0 }7 j我自己有两个ST_LINK,1个是正版,另一个是30几块钱的,两个我都拆开过,ST_LINK内没有给SWIM这4根线供电,所以开发板要有电才行,我是自学,所以学习中有很多问题,自己慢慢解决,我用硬件IIC,刚调试也碰到网上说的停在while(!(I2C_SR1 & 0x02));这句就不动了,一时半会也说不清楚,我现在也还没解决调用字符数组的问题,
sincomaster 回答时间:2018-8-17 18:03:00
共享一下我的IIC代码,如有问题还请大请不吝指正,谢谢!
  1. /*******************************************************************************( c/ h4 j1 K' K* I0 C, ?8 p: X
  2. 文件名称:        I2C文件- C& F: E9 A" M7 U8 M
  3. 函数功能:        I2C Driver Code
    $ e9 g2 P2 g+ V- l! p& A0 k
  4. 软件平台:        STVD4.3.12
    8 h% W" d4 [) i7 ~
  5. 编写日期:        2018.09.06% _! e" q/ {9 l8 l6 k1 S
  6. 代码作者:        sinco.170; \3 ~9 X* n& b0 E4 _: u
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)/ J8 \! Z% A/ R/ Q9 W% f, \
  8. *******************************************************************************/
    0 Y  t* F% Y( S8 `1 p3 c' ^2 H
  9. #include "stm8s.h"/ J7 h* [- q2 u/ p' ~' N/ m
  10. #include "iostm8s.h"
    # y) w9 E* a' e4 X
  11. #include "iic.h"0 ?  h8 a( D! T1 M" y) E" W0 v
  12. 4 c, F# C# C" f  O: _. I
  13. //http://bbs.mydigit.cn/read.php?tid=2482933
    2 D- G1 W6 ?3 l7 U
  14. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/
    : T! h9 {" W7 D4 E5 G# v! R
  15. //http://www.openedv.com/thread-70958-1-1.html" ?( v* D0 T- R- U) C: Z
  16. //http://blog.csdn.net/DevinTT/article/details/74854851  a% `0 b5 J& s% ?' `: X2 X  p
  17. /*******************************************************************************
    - k( j" z/ u7 ^) b4 Q+ W
  18. 函数名称:        void IIC_Init(void)
    ; [# [! q( t# Z
  19. 函数功能:        I2C初始化+ _* n3 x& K% x( I. l* y
  20. 输入参数:        null: o, C0 U" k' N% z( [
  21. 输出参数:        null" [8 |6 m+ G8 G2 Z5 z/ B* s
  22. 编写日期:        2018.09.06
    % _( ~$ K" F6 @, y% p1 h
  23. 代码作者:        sinco.170
    3 I8 n7 `, N% K3 X9 u# }
  24. *******************************************************************************/
    5 J& y0 O; o2 P) t3 ~% A2 w
  25. void IIC_Init(void)
    * {8 U! O" n* m' B7 g) N/ ^
  26. {        ! U6 r0 `$ f% D7 L7 c
  27.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟
    . k* t3 g% Z, b
  28.        
    / |3 m6 A5 g# ]& X& x, N7 t
  29.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入
    " c" p9 k" R9 d9 S$ K
  30.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的5 g3 }6 S0 h, x, J
  31.         PE_CR2                 &= 0xf9;                        ; ~7 m" E2 s$ K7 Z
  32.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟. c. g) s2 u, j1 _2 ^; [2 o) |
  33.         I2C_FREQR   |= 0x10;                //时钟为16MHz
    " {7 J* X& _0 Z' _8 {- {) _
  34.         //I2C_FREQR   |= 0x01;                //时钟为1MHz
    ; Y) e, t' W8 d; L/ r+ B
  35.         I2C_OARH          = 0x40;                //7位地址模式
    ( A  X& N4 P1 ~6 I( V# v. V4 H- u
  36.         I2C_OARL     = 0xa0;
    0 B3 z9 s2 \8 L- L' E! w: b
  37.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns" V& G, {3 g5 t% @" }* \& D
  38.         I2C_CCRH    |= 0x00;                //I2C为标准模式# i7 h5 z: ^4 x  ^
  39.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11
    ( L  a* a0 Y$ q* k/ j
  40.         //I2C_TRISER   = 0x02;                //时钟为1MHz时
    / r% ~$ g9 ^, p
  41.         //I2C_ITR          |= 0x00;                //禁止I2C中断  o# K" j2 p7 y: ~$ l
  42.         //I2C_CR2     |= 0x04;                //开启应?
    & A4 e- B# y" u( G+ F. x, }
  43.         I2C_CR1     |= 0x01;
    . p; }7 {- q' D1 x; b7 W& z  T
  44. }+ A" e- d1 R3 [1 u6 |

  45. . y& r0 F) x3 n" p" ^" R0 U
  46. /*******************************************************************************
    7 K. `3 a' G: K& m: T' _1 h: R2 W
  47. 函数名称:        void IIC_Start(u8 addres)" i2 b1 }( O) O$ v' `' Q3 j
  48. 函数功能:        I2C start function* M' ~# |: \* M4 C. @2 w& b6 H9 ^
  49. 输入参数:        null1 A% e1 A# r$ p0 n! v
  50. 输出参数:        Device Address
    ' S; k. p$ {5 R
  51. 编写日期:        2018.09.063 [9 v/ x; a$ C4 B4 _4 Z
  52. 代码作者:        sinco.170: Z5 F) V9 o+ Z) E# J
  53. *******************************************************************************/  s, R- [6 p( ~1 E8 C! j( I
  54. void IIC_Start(u8 addres)- q$ V; a; o" k) C" ~' X
  55. {
    7 R1 P5 K+ Q5 j- b1 @
  56.         while(I2C_SR3 & 0x02);                //检查总线是否空闲
    / W- ^  [" s' t; Z
  57.         I2C_CR2 |= 0x01;                        //产生起始信号
    2 t+ O4 E0 I5 ^  g. W4 O
  58.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成
    4 G" m4 C; Q0 [7 T& T  l( G( R. m& `
  59.         I2C_DR = addres;                        //发送从器件地址
    6 B4 e) z: Y8 n0 l' Z4 v6 u+ P
  60. }
    ( K4 N7 I9 ^9 g2 j/ d

  61.   c, I! ]( p# E6 o% q: N3 M8 c9 \1 o
  62. /*******************************************************************************: F- V1 e2 S% f# e+ \1 |
  63. 函数名称:        void IIC_Stop(void)" f$ J: v6 p7 Y9 ]
  64. 函数功能:        I2C stop function4 Q( a  |. [& F0 c
  65. 输入参数:        null
    " a0 ?( ~0 X/ C7 A' K5 j- m
  66. 输出参数:        null- r5 |* f+ R2 V% o1 L
  67. 编写日期:        2018.09.06
    , K- e* C# r* d& }$ n% O
  68. 代码作者:        sinco.170
    8 l7 u; }" c$ x) W9 v
  69. *******************************************************************************/) a3 r+ u7 R1 g
  70. void IIC_Stop(void)7 B9 |: f4 R. H' |1 P* l4 L: I
  71. {
    $ \9 X2 B& u' |( T# H# U7 O
  72.         //while(!(I2C_SR1 & 0x04));        //等待发送结束" z( T4 R8 ]# ^- M
  73.         I2C_CR2 |= 0x02;                        //产生结束信号7 l- g' O. j3 o) z6 H$ x
  74. }5 v: k* b8 b8 y1 q# r3 z
  75. / f- A: J* m: E- R: Q  r
  76. /*******************************************************************************6 s+ L) b* c  ?$ h
  77. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    / }* @  u& R/ i) U  b
  78. 函数功能:        I2C发送一个字节
    ' L+ x+ ^& |+ S- `) ?3 @
  79. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据7 l. I7 V* v) u. }5 r0 l
  80. 输出参数:        null
    4 U' C2 Y( Q1 E* ]
  81. 编写日期:        2018.09.06
    : Q& n6 W( N0 n9 }" E  x0 s
  82. 代码作者:        sinco.1700 N5 o6 T+ u' N! l& R
  83. *******************************************************************************/, Q+ Q, [6 N0 R* f5 f+ k
  84. void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    ! v6 a- f+ B0 F$ x+ ^) c) m
  85. {
    5 C% A& u, a* `! P* n1 E5 M# B
  86.         u8 temp = 0x00;+ [- g- {/ i2 L8 ~" x& k& M: \; E' M
  87.         5 U: f5 D! f  ]5 e# [% w8 I  A
  88.         IIC_Start(addres);                        //
    8 c. j. ]! Z& J4 ]8 ]) n1 U# ^7 M
  89.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成
    ' k) E% X. A/ m/ j0 l( \
  90.         temp = I2C_SR1;/ r' [* r. ]7 k# i
  91.         temp + I2C_SR3;. ]  ~- i+ N; l$ E8 |, t
  92.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空( Z$ v. \) o8 z) }& z: d
  93.         I2C_DR = addr;                                //发送写入地址到数据寄存器; Q. k6 `/ E  R; Q# s' }6 R1 S
  94.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成- ^5 I2 u' M# r( z9 r2 S9 |+ n
  95.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空$ ~# t! ?5 ]3 ~6 \
  96.         I2C_DR = dat;                                //发送数据/ a( x" w( b1 k3 [; F" J. A
  97.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成
    5 b9 ]& z2 b5 d7 T
  98.         temp = I2C_SR1;                                //清除标志位
    " J6 Q: F& Y9 O- l/ D7 h
  99.         temp = I2C_SR3;9 V2 z& F4 @! g# x* C$ L5 k
  100.         IIC_Stop();
    6 d8 t$ a1 j* m
  101. }
    7 B9 J3 P: J& R- N; N7 H, I8 R, v

  102. $ d% A; f) l' l" [& x9 r
  103. /*******************************************************************************
    1 p+ w- Z4 E2 U. {/ g2 t$ U
  104. 函数名称:        u8 IIC_ReadByte(void)
    * {2 i0 O  |0 X2 H% q* B
  105. 函数功能:        I2C读一个字节
    / g; S! {- @3 o
  106. 输入参数:        null
    % {9 b! z* p6 A7 `" y
  107. 输出参数:        返回已读到的数据
    + t) P/ T% Q6 Z( S7 f3 ^, H8 y0 C
  108. 编写日期:        2018.09.06
    ) t$ X% i. s& G7 S" g
  109. 代码作者:        sinco.1701 f& o; {8 d- G# A" a& [9 j
  110. *******************************************************************************/
    6 e8 W9 E: P& m% Y$ k
  111. u8 IIC_ReadByte(void)# V5 |* _  A  z
  112. {- }  w, O4 ]0 C5 K" I  v! H6 z
  113.         ! `$ x' M) L9 K! H( N
  114. }  z: G& C; }5 {, _& A* E+ i

  115. 0 C5 s! Z4 ^# b8 a% B  Q! s) \# L
  116. void IIC_SendNByte(u8 txd)
    " L( B7 r) M4 W8 p
  117. {
    ' H+ }& |& |  q' D/ e% X  m' m
  118.         ) N3 u5 `; {8 s# ]) O
  119. }
复制代码
sincomaster 回答时间:2018-8-18 00:53:43
今晚串口发送调试成功,可以去睡觉了,明天还得上班
2018-08-18_005142.jpg
sincomaster 回答时间:2018-8-18 09:37:49
用逻辑分析看到的数据包,还是不错的,哈哈,但很奇怪我的IIC怎么没有数据包呢,我可是一直在发0xa0呀.
2018-08-18_093211.jpg
2018-08-18_093247.jpg
sincomaster 回答时间:2018-9-12 10:55:14
8月底搬了家,搞得身体累得不行,最近没有学习,研究了一下字库:GT20L16S1Y的驱动,准备国庆搞一下这个,把SPI调试一下
叶子1568 回答时间:2018-10-12 11:31:49
楼主好厉害啊) u$ a& A' n+ j
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版