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

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

[复制链接]
sincomaster 发布时间:2018-8-3 17:54
本帖最后由 sincomaster 于 2018-8-3 18:03 编辑
0 ~" ~, P1 p% K/ x& S+ A
4 O5 A/ X% w- {' M近段时间才学完C语言,现在开始学习单片机.
0 @. ~, I0 e; [; g0 X在这贴子分享学习过程和遇见的问题,有什么不对的地方还请多指教.0 ?9 G4 D! ^" r7 }
开发板:STM8S DEV BOARD(自己做的)6 \% N- I1 Y( X* r( }1 _: r/ \: r
主控:STM8S207CBT6
3 X, w1 y. q3 y; [9 g" r显示:OLED(SSD1306),支持IIC和SPI两种接口1 H! j6 r1 q& I% _/ v
按键:TTP223-TOUCH KEY+3X4矩阵按键(原理图设计有误,使1.5.9键值相同)
2 }5 X8 E" A# |+ g. {7 a; r% W5 y6 X- J接口:含24L01无线接口,红外接口,18B20接口
' J0 `$ I! R1 @+ {( i电源:UCB5V供电,支持输出5V和3.3V
* a% M% S) Q+ R/ y指示:GPIOB外接8个LED灯0 y; E- ]8 `( f& B( i! \; l% T
语音:板上有语音电路
% H* I6 m$ d1 ^' q! {3 H0 o" G音频:喇叭和蜂鸣器
8 y! z2 [: l9 K- Q# f晶振:HSE(16MHz)( P" A0 z! @$ Y% K: Q' O, k
时钟:HYM8563' U  l  B8 a7 L  w8 n
存储:AT24C64D
) ~% B7 Y  r1 K5 V6 [7 ]0 s1 g字库:GT20L16S1Y
: J+ s6 b3 q( q+ o  t7 y
赞 收藏 评论15 发布时间:2018-8-3 17:54

举报

15个回答
sincomaster 回答时间:2018-8-3 17:56:33
本帖最后由 sincomaster 于 2018-8-3 17:57 编辑
6 p! ?% x  b$ R* \9 j! T( W
( r/ s1 {* O% T这是自已做的开发板:
, o3 ~' b4 C8 x# E2 q7 E
$ D0 O. u$ Z/ b' t
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 编辑 , A, a* f+ z) s3 H9 l

) d; y6 _; d: z: uSTM8S的延时程序用示波器测试了一下,和自已算出来的有误差,今天测试和前两的时间有一点点差,不知是不是我切换到外部时钟的原因,数据手册上说的1/2周期指令不清楚是算多少,我是按1周期指令来算的,
+ T4 K5 H) M1 N5 S网上也有说16M时钟算出来有差,但8M时钟不会差,我没去试7 Y) E$ C) N) T) {# |
还有就是5us延时是,IO推挽输出波形较好,用开漏PE1输出上升沿很慢,不清楚是否正常,PE1外部上拉4.7K.
+ q( d; W% Z3 |+ _8 s2 I. z3 L$ e7 p( {- B7 N' ?& ?3 y4 s, V9 D

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, B- d; Q5 k6 h2 `9 O
这是自已做的开发板:
- z/ U, _# k/ h
板很漂亮
sincomaster 回答时间:2018-8-12 23:55:47
本帖最后由 sincomaster 于 2018-8-12 23:58 编辑 " ]/ s4 @; E% d5 C
6 j& f9 @. Q7 _& P4 C  Z5 n
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要给我到时传上来," ]5 a+ L( h+ E5 J' 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 编辑
' W& s2 g% s2 v8 ^" J
sincomaster 发表于 2018-8-12 23:55
+ M7 X5 ~; e. r# m0 t  w# U8 F7 G经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要 ...

9 C" t( h( ^% b+ s# O, S6 R; h楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
7 \3 a" J0 w9 F* e' Z, \! }/ I* j. ]- n
另外你遇到的问题能不能传上来,我学习借鉴一下,先谢谢了" g+ [( L' Q: a- {( E9 r& E4 o; y
sincomaster 回答时间:2018-8-17 17:13:17
iyumi 发表于 2018-8-16 17:25
' @( o! Q/ N2 S楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?3 U  K+ ^2 R  t

2 C$ \- M: o  e# F! b另外你遇到的 ...
) z$ d! H6 P/ y3 P
我自己有两个ST_LINK,1个是正版,另一个是30几块钱的,两个我都拆开过,ST_LINK内没有给SWIM这4根线供电,所以开发板要有电才行,我是自学,所以学习中有很多问题,自己慢慢解决,我用硬件IIC,刚调试也碰到网上说的停在while(!(I2C_SR1 & 0x02));这句就不动了,一时半会也说不清楚,我现在也还没解决调用字符数组的问题,
sincomaster 回答时间:2018-8-17 18:03:00
共享一下我的IIC代码,如有问题还请大请不吝指正,谢谢!
  1. /*******************************************************************************
    " N& ~5 @+ x2 h
  2. 文件名称:        I2C文件" T2 l* N+ A: M1 F" k
  3. 函数功能:        I2C Driver Code" O; f5 Q+ @0 B6 c' v
  4. 软件平台:        STVD4.3.12
    ( Y( [) u  b- e* Z: `: t5 O
  5. 编写日期:        2018.09.06
    ) @- S1 c) K! m' ]( _- b7 l0 S
  6. 代码作者:        sinco.170
    + ?5 v/ v+ D; z1 t  m! m
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)
    1 D" W/ l, Q4 h' F) q* n
  8. *******************************************************************************/
      H' s5 O& I* U: T/ {  h2 s) m
  9. #include "stm8s.h"+ d' p3 @9 w. x2 s: S, D2 a' ^
  10. #include "iostm8s.h"" A+ w' P  z" a
  11. #include "iic.h"( p, A' w& y! o) q( g. D
  12. $ C4 R8 J9 P5 b% I% c
  13. //http://bbs.mydigit.cn/read.php?tid=2482933
    $ n! J7 P; D9 p2 y  Q; P
  14. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/
    ' S4 ]# R, \* o# i
  15. //http://www.openedv.com/thread-70958-1-1.html
    & k: C9 l( T+ Z8 `+ B7 H3 g) j. C9 @
  16. //http://blog.csdn.net/DevinTT/article/details/74854851" ]- F: w0 r. i3 c/ f3 m( W
  17. /*******************************************************************************. a# L; p7 C, p+ v6 `8 Q0 J- O  P: D
  18. 函数名称:        void IIC_Init(void)' q. ~) o9 l/ q; m. m# b
  19. 函数功能:        I2C初始化
    : }; r) A& z2 ?1 Y! c0 S; q
  20. 输入参数:        null
    , ]3 j8 |& L1 c0 R- ]! F
  21. 输出参数:        null9 J9 l. o; G, P# f
  22. 编写日期:        2018.09.06
    : @6 y8 l+ f" r7 I& P
  23. 代码作者:        sinco.170" X1 d! j! `& V2 z) N& b& W
  24. *******************************************************************************/
    % s" h- V" |. c' J& C! `
  25. void IIC_Init(void)
    / A" g( M3 a- i! u- T9 [
  26. {        & T4 m8 j" @1 x0 X! L8 X
  27.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟0 e8 N8 {" H5 ~. p9 }2 E
  28.         % o+ C% K! I# Q! V. G$ i2 g
  29.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入+ B# [, I+ k- W$ N0 R8 N/ K- T
  30.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的2 t8 e0 L- q9 ~4 W, e  b
  31.         PE_CR2                 &= 0xf9;                        4 G3 Y9 M6 U0 T; G: ?) N
  32.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟
    1 d6 D& S9 N2 P( Z
  33.         I2C_FREQR   |= 0x10;                //时钟为16MHz
    $ ^! J0 |& V5 \4 y2 s
  34.         //I2C_FREQR   |= 0x01;                //时钟为1MHz
      o+ n2 X  o' D! a8 t. H
  35.         I2C_OARH          = 0x40;                //7位地址模式
    9 j: z6 K' l/ `; a" u9 v
  36.         I2C_OARL     = 0xa0;
    & J" U4 O4 K- Z
  37.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns. K7 b0 S; _; a/ T: O
  38.         I2C_CCRH    |= 0x00;                //I2C为标准模式8 [& s% Y, D- p: \
  39.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11
    * {( K# k6 r% I- T, S' i
  40.         //I2C_TRISER   = 0x02;                //时钟为1MHz时
    " g+ L& {8 {+ E& J6 {5 |1 {6 a% N9 \
  41.         //I2C_ITR          |= 0x00;                //禁止I2C中断
    * d- r/ ], f" Y* K& v8 |; x
  42.         //I2C_CR2     |= 0x04;                //开启应?
    7 L: G* k% O9 A) u4 h. P9 Q
  43.         I2C_CR1     |= 0x01;
    - h$ \8 i- H& H" V3 @! {4 m0 E
  44. }
    ) j# ~$ T; z- }+ _/ V: N+ r

  45. 7 j; ?8 q! ]2 |, ^% y5 Q7 `
  46. /*******************************************************************************
    / K0 s/ s  A" p$ |' V
  47. 函数名称:        void IIC_Start(u8 addres)
    ) S7 R  T) _9 N
  48. 函数功能:        I2C start function8 D5 j7 j- u& V( X
  49. 输入参数:        null" q4 W! K1 B4 r
  50. 输出参数:        Device Address, s3 h2 u4 T% v7 ]: N7 Z6 L) Z. H
  51. 编写日期:        2018.09.06" T2 o$ A5 F! y" t' t' X) }" w' B
  52. 代码作者:        sinco.170
    / H3 }$ }; J7 A7 ~' M$ f
  53. *******************************************************************************/
    ' Y/ B: J' m) t% w9 `$ V3 z
  54. void IIC_Start(u8 addres)
    " g  ~& ]! Y2 D' [5 q) D
  55. {: L& q# k# j* u6 Y7 [% ^) D/ g
  56.         while(I2C_SR3 & 0x02);                //检查总线是否空闲2 J0 v  w$ o! R$ b+ Q
  57.         I2C_CR2 |= 0x01;                        //产生起始信号" W) _* A/ [5 w' N* `7 \7 \
  58.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成" y+ B4 s8 Y$ D8 t( x- b. j
  59.         I2C_DR = addres;                        //发送从器件地址8 \: t# k  [4 {  S8 Z- _
  60. }& E7 e0 W# s4 K: T, q; i, I
  61. 1 C- R1 g; m  x$ h0 x. X2 X" Z
  62. /*******************************************************************************/ R: b$ z& |' H9 M2 A
  63. 函数名称:        void IIC_Stop(void)
    , |/ n; }2 L' Z
  64. 函数功能:        I2C stop function( l+ P; c6 ^- _4 ?
  65. 输入参数:        null4 R& ]5 L# I, n9 m) S4 _7 s
  66. 输出参数:        null
    ' W+ O1 Q) i! T/ P  v5 w
  67. 编写日期:        2018.09.06
      O2 F* F) |5 o" b
  68. 代码作者:        sinco.170) s# Q  I) }1 Q& b" y. Z8 F
  69. *******************************************************************************/: Q4 n1 C7 F5 j3 |- d" b7 W
  70. void IIC_Stop(void)* V% M& V7 p7 j; S
  71. {
    6 [2 H/ O* W6 ^
  72.         //while(!(I2C_SR1 & 0x04));        //等待发送结束
    ; p9 f4 t) P( x
  73.         I2C_CR2 |= 0x02;                        //产生结束信号
    6 a! ~- l& R* d4 {0 v
  74. }
    & A/ u7 @6 J. U0 f" C) c
  75. 7 s3 o8 F2 B. a9 D5 J
  76. /*******************************************************************************
    , D4 i: B: i$ U2 T6 k. J
  77. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    5 J6 D% Z4 ?# V, M
  78. 函数功能:        I2C发送一个字节
    ) X+ T: T) Z3 V  [  A, X6 B
  79. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据) V' N6 y' ^3 u; ~
  80. 输出参数:        null
    5 l5 s4 p) f- ?& A
  81. 编写日期:        2018.09.066 a  j, \$ ^; a( \
  82. 代码作者:        sinco.170. g. V% {& f1 e. D9 d
  83. *******************************************************************************/
    ' X' d; r1 o6 K  _( c' n- v
  84. void IIC_SendByte(u8 addres,u8 addr,u8 dat)" `: b* I& ~" Q2 T8 u
  85. {
    * m* z6 n# S) A5 L
  86.         u8 temp = 0x00;1 B3 Y% ^# b3 N+ |
  87.         + x- B0 e$ h, x. r
  88.         IIC_Start(addres);                        //7 J1 l5 y! W: B
  89.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成
    " A0 A6 r8 j  B' O( n1 P, P1 x
  90.         temp = I2C_SR1;( C7 ?0 W* l7 k
  91.         temp + I2C_SR3;# G8 P1 S( Z& o, l" p& i6 _* j! O
  92.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空$ C9 `( S3 j, i. A
  93.         I2C_DR = addr;                                //发送写入地址到数据寄存器8 I8 V7 l- ~) M: F
  94.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成8 b% B/ c5 ?3 L& u! G
  95.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
    8 T: E- v7 Q/ Y' S! N
  96.         I2C_DR = dat;                                //发送数据
    5 G% R. E1 z- F
  97.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成4 w8 S* x" f# F" N  T* F
  98.         temp = I2C_SR1;                                //清除标志位
    $ M* J" t& u# E# V! l
  99.         temp = I2C_SR3;$ o: U/ V2 U/ Z& s& u- F
  100.         IIC_Stop();8 a! c, J% s  f4 W5 i. H
  101. }
    5 E7 g8 O1 W2 [0 K2 H' {" h

  102. 3 K# P9 b" U! D
  103. /*******************************************************************************% y1 e) C) N" Q9 l# ^8 S
  104. 函数名称:        u8 IIC_ReadByte(void)1 o1 O* d, K% g7 D( Z! E
  105. 函数功能:        I2C读一个字节' X, a: _  f/ b) _; f
  106. 输入参数:        null# `/ J' Z5 d% H9 _5 \/ f' N. p
  107. 输出参数:        返回已读到的数据+ @1 Y$ b9 z; K' A
  108. 编写日期:        2018.09.06
    , y. J! G# \4 @& O
  109. 代码作者:        sinco.170
    & j" y6 y; `, ^5 z+ t! |
  110. *******************************************************************************/# u. J/ u: t- H/ ?
  111. u8 IIC_ReadByte(void)
    0 u0 x6 |- p( V! E2 w
  112. {
    3 l0 A. `' }* h  U, V  o- s" _  @6 h
  113.        
    9 }5 p/ k+ e9 i+ ~: h( I
  114. }
    ) }8 A' |1 a+ ~- M$ \( j

  115. * {+ ~, d. V1 i0 G) e
  116. void IIC_SendNByte(u8 txd)
    8 b" y% a1 N# R+ C9 R: m' E' |
  117. {
    / {& ?) R% F3 O3 r  H6 w2 ~$ Q
  118.        
    6 S: D9 b" ~7 X  e+ V2 f
  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
楼主好厉害啊
& A! Q1 U! m" ?6 _
12下一页

所属标签

相似技术帖

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