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

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

[复制链接]
sincomaster 发布时间:2018-8-3 17:54
本帖最后由 sincomaster 于 2018-8-3 18:03 编辑
# J2 l: T  J7 y1 X$ o1 v9 S. w: }
' c" f. o, f+ h1 Y# v- i& k近段时间才学完C语言,现在开始学习单片机.
3 C# E0 I: G. p& W$ e在这贴子分享学习过程和遇见的问题,有什么不对的地方还请多指教.
; k2 E* F$ R  X# A, i% v. K1 w开发板:STM8S DEV BOARD(自己做的)
6 _8 [( I( s  i- O: \, g主控:STM8S207CBT6
: k; v4 a5 S$ ^5 ?7 v6 t' ^显示:OLED(SSD1306),支持IIC和SPI两种接口3 v+ e! I9 b1 j
按键:TTP223-TOUCH KEY+3X4矩阵按键(原理图设计有误,使1.5.9键值相同)* y5 a3 M% y  S+ J$ T
接口:含24L01无线接口,红外接口,18B20接口
% Y% f/ j' H# X: I: ^4 a电源:UCB5V供电,支持输出5V和3.3V  G/ t6 N9 s3 o; b7 p
指示:GPIOB外接8个LED灯
) |0 R3 L- [% Y! B% h( L语音:板上有语音电路, V) N& M) H. G
音频:喇叭和蜂鸣器6 `$ G) L  M/ ~) e; {
晶振:HSE(16MHz)" r$ T  K& p% u& a1 c; j
时钟:HYM8563  c* X( @0 v, d1 ^
存储:AT24C64D
" I0 f8 \5 J( w" L+ B+ I! q字库:GT20L16S1Y& V; @/ A' f1 t( o) w
收藏 评论15 发布时间:2018-8-3 17:54

举报

15个回答
sincomaster 回答时间:2018-8-3 17:56:33
本帖最后由 sincomaster 于 2018-8-3 17:57 编辑
  `3 l: o( j5 V% ^3 k6 c
# f' |( m1 k+ n* V' A& B: V( P这是自已做的开发板:2 s+ D4 C. D& H

1 v! b- n. k1 ?
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 编辑 ; s' B& G: ]4 Q  v4 y
+ n' w4 D1 g3 L7 `- l9 H, ~9 w
STM8S的延时程序用示波器测试了一下,和自已算出来的有误差,今天测试和前两的时间有一点点差,不知是不是我切换到外部时钟的原因,数据手册上说的1/2周期指令不清楚是算多少,我是按1周期指令来算的,
1 @; D. |. {+ @) f% [; a4 P' [; F; t网上也有说16M时钟算出来有差,但8M时钟不会差,我没去试
/ b8 z: i# f; H* a, c$ K还有就是5us延时是,IO推挽输出波形较好,用开漏PE1输出上升沿很慢,不清楚是否正常,PE1外部上拉4.7K.
" t1 R+ r4 n9 P$ o( ?& R( \; X6 ^( ]0 `

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:561 f, O2 |' Y8 g: E! V
这是自已做的开发板:
& P; `; F; @; Y1 \% a$ ^
板很漂亮
sincomaster 回答时间:2018-8-12 23:55:47
本帖最后由 sincomaster 于 2018-8-12 23:58 编辑
% C8 M' k( U2 @4 O5 n. g6 P, X, l2 f6 E7 }
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要给我到时传上来,
- r6 B& T; m3 |3 d
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 编辑 8 I0 q& \8 h; b- W6 F5 D3 X
sincomaster 发表于 2018-8-12 23:55
5 x, j' _4 C9 `' h; x经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要 ...

+ x$ Y! c3 _5 c, ~3 J6 }1 _: d2 O楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?; V) C: a" s- r1 }" K  U- S

& R* N# s4 S' v" m另外你遇到的问题能不能传上来,我学习借鉴一下,先谢谢了' }: W; E0 z' o8 ~/ G$ U* |
sincomaster 回答时间:2018-8-17 17:13:17
iyumi 发表于 2018-8-16 17:25
0 `4 @+ p/ e3 i7 j2 Z楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
' _) @( M0 `! ~/ i/ a
$ d+ K( T: k6 |1 I- ^另外你遇到的 ...

* R# ?' n/ r, {# Q2 k$ t% Y我自己有两个ST_LINK,1个是正版,另一个是30几块钱的,两个我都拆开过,ST_LINK内没有给SWIM这4根线供电,所以开发板要有电才行,我是自学,所以学习中有很多问题,自己慢慢解决,我用硬件IIC,刚调试也碰到网上说的停在while(!(I2C_SR1 & 0x02));这句就不动了,一时半会也说不清楚,我现在也还没解决调用字符数组的问题,
sincomaster 回答时间:2018-8-17 18:03:00
共享一下我的IIC代码,如有问题还请大请不吝指正,谢谢!
  1. /*******************************************************************************1 r+ N: E9 S2 w3 Y
  2. 文件名称:        I2C文件  `$ N# |+ c+ ^- {1 {
  3. 函数功能:        I2C Driver Code
    4 ^- d5 V; L/ \2 k' {. [$ `8 d# C) ^
  4. 软件平台:        STVD4.3.12! C2 T; L1 y( ?' A9 h& k' b! ]
  5. 编写日期:        2018.09.06; b" }0 S7 E0 S0 n1 @$ h" N; ]
  6. 代码作者:        sinco.170
    . p& V6 Q) g/ N8 M% {$ s
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)  F0 `. Q0 M4 h& G7 P
  8. *******************************************************************************/
    + q! k( V1 u5 K5 y
  9. #include "stm8s.h"* }( A- D5 R& Z. X
  10. #include "iostm8s.h"
    0 X/ s4 M: J+ x% v+ e
  11. #include "iic.h"' o; M7 q" L; H  v( v# v* i

  12. . ]* |) J8 P/ U1 I' J7 c
  13. //http://bbs.mydigit.cn/read.php?tid=2482933
    + W9 m/ ]- ^. m( Z1 P- ]
  14. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/
    ! p$ Z) p- W2 t8 q- Q
  15. //http://www.openedv.com/thread-70958-1-1.html
    6 L$ b6 @- ^1 u1 w
  16. //http://blog.csdn.net/DevinTT/article/details/74854851
    8 Q% P" s  k, z' h+ @  Z
  17. /*******************************************************************************) M8 A. t) R2 H" E7 C" r0 n
  18. 函数名称:        void IIC_Init(void)4 G( r8 e7 m. `: @
  19. 函数功能:        I2C初始化5 h  V) b) {6 j1 ?3 k! }9 {9 u- v
  20. 输入参数:        null' v$ N  v# I2 G' ^" U/ _
  21. 输出参数:        null8 l6 e+ g  K# c* k+ y0 ?2 C
  22. 编写日期:        2018.09.06
    * Q9 H' v( t1 W+ D3 Q$ _5 v; X+ L
  23. 代码作者:        sinco.170% z/ K! ~. A, e, W$ x  T! q
  24. *******************************************************************************/
    3 L. b3 {6 l" r3 H1 |
  25. void IIC_Init(void)
    3 I: ~6 z- m8 @4 w& U
  26. {        ; A5 e4 e* j% [3 d* J+ t
  27.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟
    5 o/ V, d9 X. X2 w7 b$ V; r
  28.         . o" E% x& N& N2 `9 b$ U
  29.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入
    7 j* k  u" ]3 j* D4 p# R0 c8 i
  30.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的2 f; y8 o6 g. H' O6 o
  31.         PE_CR2                 &= 0xf9;                        8 v1 k. C3 M2 @* [0 d
  32.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟8 v& n- Z2 W% y- S+ S3 p% x
  33.         I2C_FREQR   |= 0x10;                //时钟为16MHz' k3 X: V  k  a4 s  K
  34.         //I2C_FREQR   |= 0x01;                //时钟为1MHz- c4 @4 @$ Q8 w4 _4 O$ q/ w8 p
  35.         I2C_OARH          = 0x40;                //7位地址模式, o: V# k, f) Z6 W$ Z' T
  36.         I2C_OARL     = 0xa0;
    0 ~& k$ X6 u& A% h: `1 ~$ F, x* z
  37.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns) C" d( U! o- q
  38.         I2C_CCRH    |= 0x00;                //I2C为标准模式
    ! S3 K% v/ N( \
  39.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11
    : A$ x# f. l! Q) t
  40.         //I2C_TRISER   = 0x02;                //时钟为1MHz时0 l$ \- q6 z# ]" U$ F% M
  41.         //I2C_ITR          |= 0x00;                //禁止I2C中断# v* F/ C- X3 @" _+ g
  42.         //I2C_CR2     |= 0x04;                //开启应?
    4 h7 C9 c0 L$ _6 o9 _* K
  43.         I2C_CR1     |= 0x01;
    $ h! O9 u8 t; ?- J, W, [  K
  44. }
    6 a8 M* u7 U9 M

  45. 2 k% a  n* [, c! p; a* s
  46. /*******************************************************************************7 K4 }( Z/ M( F
  47. 函数名称:        void IIC_Start(u8 addres)8 Z6 L# Z" h; D7 ~2 q
  48. 函数功能:        I2C start function9 E' K% I/ K- k! {& R. }
  49. 输入参数:        null
    7 q# a) C  f9 d; f6 y) x
  50. 输出参数:        Device Address, r* `: p- V! L3 B, w: d
  51. 编写日期:        2018.09.06
    + ^/ O, r$ [& f$ y% p+ x
  52. 代码作者:        sinco.170) u5 R1 r' m5 J! X- P; c/ W
  53. *******************************************************************************/
    " Z5 p: ~9 i6 J5 P
  54. void IIC_Start(u8 addres)
    ' y- X  w0 G! Y" s" w) a4 n) O
  55. {
    ' ?) T( i% F/ S1 H# O
  56.         while(I2C_SR3 & 0x02);                //检查总线是否空闲, B' e2 O4 {- P; J9 Q
  57.         I2C_CR2 |= 0x01;                        //产生起始信号0 o" k1 d, ?% x6 m' c
  58.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成. ?( e3 `: B: A6 e: n% z% ~
  59.         I2C_DR = addres;                        //发送从器件地址
    1 d( O! X- a, d
  60. }
    9 V( K6 @3 z3 t# s2 |

  61. 3 T3 ?4 t/ h  q: B
  62. /*******************************************************************************
    $ |* W% F: ]7 n0 R
  63. 函数名称:        void IIC_Stop(void)
    ( d( J4 Q! y0 N% S
  64. 函数功能:        I2C stop function
    ! s7 ?6 v5 ?8 I
  65. 输入参数:        null9 ], N1 h! G  W  _
  66. 输出参数:        null: f+ t9 `% e  `! Y# d' S
  67. 编写日期:        2018.09.06
    $ P( A9 Z3 V  V0 g  R
  68. 代码作者:        sinco.1703 k* ?0 E3 s: `: m8 s
  69. *******************************************************************************/
    1 k5 U; O5 P( G
  70. void IIC_Stop(void)( r* g4 C. W' K
  71. {
    0 D8 H8 [: P# K
  72.         //while(!(I2C_SR1 & 0x04));        //等待发送结束0 n4 F/ q' z; O8 \, _
  73.         I2C_CR2 |= 0x02;                        //产生结束信号
    ( f, E+ P8 a( ~9 D- J
  74. }
    7 i7 n# V; M/ e( g- h0 R

  75. + e; n, \/ G4 Y3 {+ @, i
  76. /*******************************************************************************% l" G0 N% u6 H  F6 U" b$ A6 Z* ]
  77. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    " N( j. |( ~# _) N; P- d# Z
  78. 函数功能:        I2C发送一个字节* P$ e, u0 j) Z$ O$ l, J! g5 \& f+ \
  79. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据" h- m( ]  ?8 \, P2 Z" l0 I
  80. 输出参数:        null' o! e4 L3 d) g. B6 v
  81. 编写日期:        2018.09.068 u8 D; i6 h& @
  82. 代码作者:        sinco.170
    6 U) s0 D) x. ?. @9 W/ T
  83. *******************************************************************************/" s9 N! E% o% w' h6 ^4 C6 U
  84. void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    1 Y: w* \8 f% O  I6 x  h
  85. {
    ; A0 c. u1 R! S: y( y
  86.         u8 temp = 0x00;* H" Y' T9 G; _
  87.         3 M8 ~) n. k' e' d- m3 N
  88.         IIC_Start(addres);                        //
    + ~. R* r" Q2 Z  I6 f
  89.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成
    1 k* Z& ~: V+ T7 F3 c+ u  ^8 t3 r
  90.         temp = I2C_SR1;* ]! E, ~7 S- K! k  @2 j  Q
  91.         temp + I2C_SR3;: D7 H6 g! x  c
  92.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
    ) J& {" b9 u7 W; U1 f, d/ H- V: y) W
  93.         I2C_DR = addr;                                //发送写入地址到数据寄存器9 |" d3 C& J: m2 E# S+ g
  94.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成( E" `6 V3 }! S  ~* F
  95.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
    0 z$ y; O( u! J5 d/ I: C
  96.         I2C_DR = dat;                                //发送数据" z* z. d% J2 @5 ~2 p
  97.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成) {2 V' I8 x0 Z$ e! E) j1 W
  98.         temp = I2C_SR1;                                //清除标志位: ]  ?% U' R. U! Q# q( C
  99.         temp = I2C_SR3;
    - W, ~/ K0 A5 L/ R, u  @! j% \8 Z
  100.         IIC_Stop();
    + `9 k$ a" K0 @- A4 R  Z$ ~
  101. }
    % s5 u; S- Y# c  z: p# S
  102. 8 s' l+ S4 Z: M$ d3 P% i: ?
  103. /*******************************************************************************# E& _: B& y: ]/ S9 T5 K- }
  104. 函数名称:        u8 IIC_ReadByte(void)
    . y  H5 @4 p% N6 f# t0 @2 Q3 \- ~$ U
  105. 函数功能:        I2C读一个字节
    6 C% @8 f- {6 K! s
  106. 输入参数:        null$ ]$ M; O: C  V2 @- |
  107. 输出参数:        返回已读到的数据
    6 p. F3 E" U6 [( ]% r7 I
  108. 编写日期:        2018.09.06
    3 S% U/ ^2 {  k3 W( w
  109. 代码作者:        sinco.170
      t" ?- j! A. R
  110. *******************************************************************************/
    + m2 D+ V# U. v9 X/ j
  111. u8 IIC_ReadByte(void)
    9 x6 l1 v  u& y1 F  A! ?, @
  112. {+ O/ v7 {! B; J* S4 t  v
  113.        
    4 `/ o% s4 J6 Q7 h
  114. }
    - W3 D3 z' `$ H" S* t% R
  115. 1 N8 t  b3 k+ Y- O. b5 N  k( Z
  116. void IIC_SendNByte(u8 txd)- S7 }, }, u* k) g: K
  117. {
    " G! A0 i; y$ |2 }: A9 ~% Y/ c
  118.        
    , p+ |; _8 n8 p+ |3 F( _6 T
  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
楼主好厉害啊
$ s" K( ^! H+ }9 R, \; Q  {4 _& Q3 |* c
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版