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

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

[复制链接]
sincomaster 发布时间:2018-8-3 17:54
本帖最后由 sincomaster 于 2018-8-3 18:03 编辑
) D$ }2 @7 L9 B/ O0 G5 i: O$ m/ }5 o( d+ z6 g
近段时间才学完C语言,现在开始学习单片机.8 w& e8 I# R5 V& p4 ^
在这贴子分享学习过程和遇见的问题,有什么不对的地方还请多指教.
3 h& g& z0 J5 f5 H开发板:STM8S DEV BOARD(自己做的)7 M  u/ V# T. o( V& K
主控:STM8S207CBT6
& \6 v, e; L( K9 s0 T2 J! ~显示:OLED(SSD1306),支持IIC和SPI两种接口+ W8 T1 B' c! N, t2 {0 a
按键:TTP223-TOUCH KEY+3X4矩阵按键(原理图设计有误,使1.5.9键值相同)9 B' ~& u3 X$ }& D' h; g7 `* A
接口:含24L01无线接口,红外接口,18B20接口7 j' D4 V  w1 _6 D
电源:UCB5V供电,支持输出5V和3.3V; @# f2 c. J6 `& |7 V
指示:GPIOB外接8个LED灯# `3 v, {/ n; a  e" _- R
语音:板上有语音电路  l. ]' O" |0 e$ \" M, n' {
音频:喇叭和蜂鸣器# V: O- G! g5 a# U
晶振:HSE(16MHz)
2 l$ [2 g3 X; q4 O& m6 _% D时钟:HYM8563
1 Z; U+ v+ }8 K% b' D存储:AT24C64D( t. d' c2 e5 t5 h
字库:GT20L16S1Y' w, C0 l. t0 \9 V& @
赞 收藏 评论15 发布时间:2018-8-3 17:54

举报

15个回答
sincomaster 回答时间:2018-8-3 17:56:33
本帖最后由 sincomaster 于 2018-8-3 17:57 编辑 2 q* I$ P! A4 R5 i4 Z; ?" ~

2 I( O/ D% R: c6 z5 Z* C这是自已做的开发板:- Z& O4 |* f3 G6 d
6 z/ V! `8 d. X* T1 I; h2 e
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 编辑
! o+ B% B4 b2 C4 {. V) K& |7 d  f4 X, C& I6 @- Q/ j: }
STM8S的延时程序用示波器测试了一下,和自已算出来的有误差,今天测试和前两的时间有一点点差,不知是不是我切换到外部时钟的原因,数据手册上说的1/2周期指令不清楚是算多少,我是按1周期指令来算的,# M1 n; k* P9 n
网上也有说16M时钟算出来有差,但8M时钟不会差,我没去试
" q* c( r7 u$ W* Q9 S- X  y还有就是5us延时是,IO推挽输出波形较好,用开漏PE1输出上升沿很慢,不清楚是否正常,PE1外部上拉4.7K.# }& W+ @! c, l0 L7 x- T% d
* e; t/ l2 B. |+ f& K

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:564 H& `4 O" Y4 F" F, I, G
这是自已做的开发板:

. \7 j& {9 T! x8 ?) L% A5 d板很漂亮
sincomaster 回答时间:2018-8-12 23:55:47
本帖最后由 sincomaster 于 2018-8-12 23:58 编辑
2 c7 E" m; N% ^7 T; A* B+ t$ D" @( C. J. e
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要给我到时传上来,6 L& U  l. `0 L: l; p! H
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 编辑
" Q' R, P: y! L7 ]; a# ^# v
sincomaster 发表于 2018-8-12 23:559 {8 w- t, |- S* u5 E) E
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要 ...

( F6 e4 N% ~8 u, M6 w0 [% t楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
- w7 t- x' |$ k/ Y% G& G3 `- H3 Z. ?8 _" C' T- i$ i4 X
另外你遇到的问题能不能传上来,我学习借鉴一下,先谢谢了) T9 ~' R  x3 r6 o! _+ ~
sincomaster 回答时间:2018-8-17 17:13:17
iyumi 发表于 2018-8-16 17:25
) ]5 ^0 A, f; Q) O楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?0 C$ F6 T0 q; x4 M
; \/ H$ n3 K+ U+ m0 K
另外你遇到的 ...

8 e0 P9 ]; r$ }& o$ W' b( G我自己有两个ST_LINK,1个是正版,另一个是30几块钱的,两个我都拆开过,ST_LINK内没有给SWIM这4根线供电,所以开发板要有电才行,我是自学,所以学习中有很多问题,自己慢慢解决,我用硬件IIC,刚调试也碰到网上说的停在while(!(I2C_SR1 & 0x02));这句就不动了,一时半会也说不清楚,我现在也还没解决调用字符数组的问题,
sincomaster 回答时间:2018-8-17 18:03:00
共享一下我的IIC代码,如有问题还请大请不吝指正,谢谢!
  1. /*******************************************************************************
    $ z  g' ~: z6 {/ I
  2. 文件名称:        I2C文件9 r: n; K5 A- X" z
  3. 函数功能:        I2C Driver Code0 _7 }9 j, ]) ^9 [9 Y
  4. 软件平台:        STVD4.3.12" X( d) ?% n. ~; c
  5. 编写日期:        2018.09.06# g% Q' {. o7 Q! F4 c- z- h
  6. 代码作者:        sinco.170
    % E( `  k* k4 |* {4 z) D$ I
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)& N! O* m  Q& l) [7 W4 _. b
  8. *******************************************************************************/
    ( B2 B7 A8 p( z1 z+ v) E
  9. #include "stm8s.h": z6 _' g$ [& _& I7 w
  10. #include "iostm8s.h"
    + @4 n5 T9 I  ^- o' v, }
  11. #include "iic.h"1 q, A8 x' i# Q1 Y7 s/ y
  12. 6 r/ ~- f9 C6 w8 V/ N2 @
  13. //http://bbs.mydigit.cn/read.php?tid=2482933
    % V' X% ?4 W8 j6 c9 Y
  14. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/: c6 }6 x8 J! a' o/ p  y( A
  15. //http://www.openedv.com/thread-70958-1-1.html
    & H* F" `! u/ ~  ~, K8 S/ }! n
  16. //http://blog.csdn.net/DevinTT/article/details/74854851
    ; ^' J5 C" Q) O
  17. /*******************************************************************************
    9 n# h. B) s& B) m9 x  {
  18. 函数名称:        void IIC_Init(void)6 }; f5 H0 `+ o7 m" K
  19. 函数功能:        I2C初始化4 W* S5 U6 v6 z
  20. 输入参数:        null
    . m; }1 G- |2 z# {
  21. 输出参数:        null
    9 `7 e0 x. s9 J# r; z/ L
  22. 编写日期:        2018.09.06. N+ n# w) m" Q7 R& Y
  23. 代码作者:        sinco.170
    9 Z; b2 L. e  B' j3 ~4 r
  24. *******************************************************************************/
    * \/ E% `4 u. ]* p) D
  25. void IIC_Init(void), E. g8 n) t4 k3 n& E6 r6 B$ B
  26. {       
    # }& m6 B9 O* u* r( I( _2 U$ d
  27.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟
    2 T7 h8 s$ r  N2 q, n0 y8 D
  28.         ; R& H+ N: Y: c: ^- E* Q
  29.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入: B+ I# C0 {3 n
  30.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的# F& {# J: y+ \
  31.         PE_CR2                 &= 0xf9;                       
    " L; q1 Y5 ~# }
  32.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟
    " G6 P; c: V5 z
  33.         I2C_FREQR   |= 0x10;                //时钟为16MHz$ k! v& U6 \  i) y
  34.         //I2C_FREQR   |= 0x01;                //时钟为1MHz
    5 e) r) j8 Q1 w# O) K  `
  35.         I2C_OARH          = 0x40;                //7位地址模式
    + M) F5 }+ u& J+ b
  36.         I2C_OARL     = 0xa0;
    8 k4 K  E" N1 ?9 j: W: U3 y
  37.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns$ u: d  X; g6 s/ x
  38.         I2C_CCRH    |= 0x00;                //I2C为标准模式
    % a9 C( l( y7 D8 X
  39.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11" l  x% w! J* M- S7 v" t7 T$ ~
  40.         //I2C_TRISER   = 0x02;                //时钟为1MHz时2 ~5 ^, K) R8 t) O+ n
  41.         //I2C_ITR          |= 0x00;                //禁止I2C中断- q. ~) w" D  \1 z, C
  42.         //I2C_CR2     |= 0x04;                //开启应?
    , m2 j1 u4 j( Q: M( [
  43.         I2C_CR1     |= 0x01;# f% q4 {% k  V' K/ J& z# B) H
  44. }' i  W3 L( R$ T9 q; a1 |) a6 x

  45. - g; S) S  Q' H3 |+ W( s/ E" w
  46. /*******************************************************************************
    . R7 v1 _$ A8 ^
  47. 函数名称:        void IIC_Start(u8 addres)) i* y9 u* d- N7 Q* {
  48. 函数功能:        I2C start function
    ! A4 `2 ?+ N, i) W  _
  49. 输入参数:        null% p' n: G9 s0 l7 H5 y
  50. 输出参数:        Device Address
    7 }( c+ V; U9 R# m. N7 P  P
  51. 编写日期:        2018.09.069 J# |1 Y9 u4 ?# A& L7 X$ k
  52. 代码作者:        sinco.170
      y2 j  ?: T0 z- m) D
  53. *******************************************************************************/
    5 F, O5 O& a% A  N* [
  54. void IIC_Start(u8 addres)
    . E1 G! Y% X4 t; l4 Y2 k4 ?
  55. {: i8 d6 P1 N9 E- Y2 f6 h# h% C
  56.         while(I2C_SR3 & 0x02);                //检查总线是否空闲  _: G  S1 L: _( @
  57.         I2C_CR2 |= 0x01;                        //产生起始信号% ~5 w$ U0 U6 ?3 @. K7 s: A
  58.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成* I% s: J" h: k/ A( ]8 L
  59.         I2C_DR = addres;                        //发送从器件地址3 A2 A! H& S* X4 E, L9 j) j) L
  60. }; l, X1 C7 [( P

  61. : H' v; T- ~; a! j; I; M; f
  62. /*******************************************************************************
    + J  r$ r: v  Z% [2 I
  63. 函数名称:        void IIC_Stop(void)6 _9 c& Z: H9 r! f8 v3 V5 r1 T" Q
  64. 函数功能:        I2C stop function
    , n, |9 k7 l3 Q4 D% X
  65. 输入参数:        null0 h# h, h/ k- S( f8 Y
  66. 输出参数:        null
    # u8 W( }1 n: L. k
  67. 编写日期:        2018.09.060 Z& R  |' v% l( I$ Y% S; e
  68. 代码作者:        sinco.170. I% [+ Z  j9 a7 B  Q3 ~1 w. r
  69. *******************************************************************************/
    - h0 ?- ], t, ^/ m
  70. void IIC_Stop(void)* Y2 v" F" ~4 [/ U- ^. w$ K
  71. {
    5 W; x% ?) w& `3 F
  72.         //while(!(I2C_SR1 & 0x04));        //等待发送结束0 J" i* L1 @7 J& n5 \6 m
  73.         I2C_CR2 |= 0x02;                        //产生结束信号
    * I3 U0 ^% o! E
  74. }
    $ N  {# N! V0 x

  75. , [: E% G4 ~0 U$ C' n8 p+ U/ @
  76. /*******************************************************************************$ `5 j* ^; H8 X/ P
  77. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    ; u& ?8 m+ w! v, J3 F& e
  78. 函数功能:        I2C发送一个字节
    ) C& W2 W+ F/ p3 {% s
  79. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据. e7 j5 k; X1 Q/ N# a
  80. 输出参数:        null
    % }5 i8 b$ Q) F: {; u" Z
  81. 编写日期:        2018.09.06
    ( R0 R  Q0 C- z$ Y* m, ]
  82. 代码作者:        sinco.170
    $ C( w8 p0 w% s& e
  83. *******************************************************************************/
    ) p0 h, O; J9 k$ z( n7 n
  84. void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    ' I; Q5 l! w9 J+ h
  85. {* ]# l" \9 _: F
  86.         u8 temp = 0x00;* L2 w* d, T% M' b: q+ r' p
  87.         ; M* L* T5 z: A7 J2 V
  88.         IIC_Start(addres);                        //
    + r) h. g6 v2 o
  89.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成
    5 s/ [) \5 O4 l. l( m# {2 o& K
  90.         temp = I2C_SR1;
    ' n4 b4 b2 K6 ]$ i/ T
  91.         temp + I2C_SR3;
    ' v2 M; D* y* V  _) P9 Q
  92.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
    & Q1 b3 w6 P5 `- l7 K' l
  93.         I2C_DR = addr;                                //发送写入地址到数据寄存器4 k2 a7 Q" a3 x" E8 `4 G
  94.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成/ Z5 s- g4 c# B3 w/ e9 Z/ \
  95.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空; G1 w* Z9 L1 r5 x3 ^9 l
  96.         I2C_DR = dat;                                //发送数据  l9 \) M+ B  n. V! a5 m# A" R
  97.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成* g. L$ B5 Y$ X0 d, d
  98.         temp = I2C_SR1;                                //清除标志位1 A7 ?7 E, Q2 t. z# S5 i7 y5 O' q
  99.         temp = I2C_SR3;
    $ z8 T5 r6 s& U8 Y3 ^
  100.         IIC_Stop();0 g" Q) C# B" I) A7 V4 P5 Z
  101. }9 Q3 y5 u7 n4 H0 M- S$ c

  102. % }( L2 ?/ P& n) U' a& H9 l
  103. /*******************************************************************************
    8 z& k9 A3 [" B- Z* r
  104. 函数名称:        u8 IIC_ReadByte(void)
    ! r3 d2 e0 m" x2 p- b* ?) X1 M
  105. 函数功能:        I2C读一个字节
    ' U/ [: x3 T- G$ U* w( c5 R
  106. 输入参数:        null
    9 s& P' F. e4 m! R) |: e5 _
  107. 输出参数:        返回已读到的数据( w1 G: T9 q5 L3 j/ n
  108. 编写日期:        2018.09.06
    % b/ s* ~! N' {
  109. 代码作者:        sinco.170
    + E% q* V% W9 T* l- t, s# x
  110. *******************************************************************************/, l- s; A- U7 N( p, M  [. x
  111. u8 IIC_ReadByte(void)  t- R8 w0 |) n
  112. {3 d: O* |" V- s$ N
  113.         , Z: r1 T4 o- b7 x2 [" W
  114. }
    # o; p1 B) I( d0 p5 N1 T; l

  115. " d" j; N3 P- E& M% N: q
  116. void IIC_SendNByte(u8 txd)' z8 V( O  u2 Z& L, x1 |* ~# T4 ?/ E: N
  117. {2 C5 v$ s, S' G' K$ o) [
  118.        
    / s, b: E; p9 |( s) x
  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
楼主好厉害啊: B# R. K: d$ E. ]' `! C% c
12下一页

所属标签

相似技术帖

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