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

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

[复制链接]
sincomaster 发布时间:2018-8-3 17:54
本帖最后由 sincomaster 于 2018-8-3 18:03 编辑
+ C) S! N# U) z$ d5 A- ^$ y9 q0 }
$ Y6 e: K) E: e; j% x8 P近段时间才学完C语言,现在开始学习单片机.
/ m) T* z( S. @1 ]在这贴子分享学习过程和遇见的问题,有什么不对的地方还请多指教.
  Z# R5 [+ y$ a  o! S/ R! l! U9 ?8 X开发板:STM8S DEV BOARD(自己做的)
+ R$ `  g; Y2 [0 U; V; y& B主控:STM8S207CBT6
* B4 ?2 G+ M9 w/ M4 J# D显示:OLED(SSD1306),支持IIC和SPI两种接口
  d% x4 y+ t) N; k- J& u0 v  I6 t按键:TTP223-TOUCH KEY+3X4矩阵按键(原理图设计有误,使1.5.9键值相同)
# X5 c5 Y$ x8 H3 [: J' R$ D! R接口:含24L01无线接口,红外接口,18B20接口
* F( O# v+ h# p( `& {4 a电源:UCB5V供电,支持输出5V和3.3V
' W8 g' R2 j# G' t" ]+ t指示:GPIOB外接8个LED灯/ j& m- }" w) l8 i
语音:板上有语音电路
. N; {7 j+ E, z音频:喇叭和蜂鸣器
7 z" `2 Y* J% K6 b晶振:HSE(16MHz)
( e! f+ I% a* I, E, A/ P时钟:HYM85637 `4 o, |& Q! i. s" s5 X; Z& E
存储:AT24C64D1 b# @" Y7 \7 {( p
字库:GT20L16S1Y
; c5 V2 P+ ^# C
收藏 评论15 发布时间:2018-8-3 17:54

举报

15个回答
sincomaster 回答时间:2018-8-3 17:56:33
本帖最后由 sincomaster 于 2018-8-3 17:57 编辑
4 `7 r  W0 Q! s7 h( p9 \: i0 @* p1 F3 N( I" o
这是自已做的开发板:* X) p/ w( c7 G. C* P0 `
" `  ?* l, n7 J8 {2 W, W
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 编辑 + u* n: k+ g8 u! y9 H

, C4 q. D) A  |' [- [" L$ Y' fSTM8S的延时程序用示波器测试了一下,和自已算出来的有误差,今天测试和前两的时间有一点点差,不知是不是我切换到外部时钟的原因,数据手册上说的1/2周期指令不清楚是算多少,我是按1周期指令来算的,3 K: H8 j" M) h  H& m6 V
网上也有说16M时钟算出来有差,但8M时钟不会差,我没去试
$ r* K) x  @+ Z' O, F1 y$ `还有就是5us延时是,IO推挽输出波形较好,用开漏PE1输出上升沿很慢,不清楚是否正常,PE1外部上拉4.7K.  w, T: u8 J( W) e

) ~2 R. n0 n' S* ]/ T) e' z7 G

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" {! o( X  j! q" d3 n5 ?
这是自已做的开发板:

: Y+ b/ F- X0 v+ O! u5 K0 t板很漂亮
sincomaster 回答时间:2018-8-12 23:55:47
本帖最后由 sincomaster 于 2018-8-12 23:58 编辑
. I8 V3 l0 n) x6 @# P% `& v9 o( Z& b. L4 ~4 g
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要给我到时传上来,
2 [. Y8 o  d: ~3 s$ A! J3 n
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 编辑 ! z# \& o7 q% o7 s( [7 D* \6 E( [$ [
sincomaster 发表于 2018-8-12 23:55- [9 O. b+ a7 w+ a4 Q$ j, \( m1 l
经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要 ...
; v. x1 z: @) t% S! J- h+ H
楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?: K% Q: F, z! T- F' ^+ E; [3 q4 t
0 O% Z2 W( ]' A& H% Q1 P. o
另外你遇到的问题能不能传上来,我学习借鉴一下,先谢谢了, H* j8 G: W3 e0 h
sincomaster 回答时间:2018-8-17 17:13:17
iyumi 发表于 2018-8-16 17:25
- M$ f* |  J+ E# G- a楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?! P6 [" W" y6 V4 d
& X, S% d. Y, \  P0 o# h4 ]
另外你遇到的 ...

0 q; t) Z) Y  z$ Z我自己有两个ST_LINK,1个是正版,另一个是30几块钱的,两个我都拆开过,ST_LINK内没有给SWIM这4根线供电,所以开发板要有电才行,我是自学,所以学习中有很多问题,自己慢慢解决,我用硬件IIC,刚调试也碰到网上说的停在while(!(I2C_SR1 & 0x02));这句就不动了,一时半会也说不清楚,我现在也还没解决调用字符数组的问题,
sincomaster 回答时间:2018-8-17 18:03:00
共享一下我的IIC代码,如有问题还请大请不吝指正,谢谢!
  1. /*******************************************************************************8 Y6 _  m: p( |% {" m( p  s' I
  2. 文件名称:        I2C文件
    # u% @6 j, p7 g+ {) L
  3. 函数功能:        I2C Driver Code
    8 \( r- H' |! D% i0 k
  4. 软件平台:        STVD4.3.12
    5 C) p. y* I) K' {; D7 G( h
  5. 编写日期:        2018.09.06/ n5 y% V+ i8 F  o
  6. 代码作者:        sinco.170
    ( K; ?' s8 `2 {2 d& W# U6 R
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)4 D/ _3 y3 }! R& d5 I
  8. *******************************************************************************/
    7 Q( H; N* b* b% U0 Y& w
  9. #include "stm8s.h"
    6 S7 }8 P3 K0 H) {( ]# W
  10. #include "iostm8s.h"
    - {& l" F- h7 E+ t# A( Y7 h/ N
  11. #include "iic.h"9 W6 i' j: ^3 ?8 f' g
  12. , C! z, \% V# K% \) G. q7 J
  13. //http://bbs.mydigit.cn/read.php?tid=24829336 S2 _/ L. j% M; Z5 Q
  14. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/
    ' Z5 ^$ w! e1 F. e; G# q
  15. //http://www.openedv.com/thread-70958-1-1.html5 g, R$ t% G0 x2 r" Q- [$ W9 o4 K
  16. //http://blog.csdn.net/DevinTT/article/details/74854851
    6 M1 W% L1 G* V* C
  17. /*******************************************************************************
    . N% |# v: Y4 ?* S8 J
  18. 函数名称:        void IIC_Init(void), F8 G4 |! l8 {3 }7 _- J+ L
  19. 函数功能:        I2C初始化- ^+ A: ^6 g8 k+ g( w
  20. 输入参数:        null6 b( X+ m4 P' H0 \+ V/ W
  21. 输出参数:        null$ \- i1 @' E2 v
  22. 编写日期:        2018.09.06' D3 G  j" g2 i$ |! [
  23. 代码作者:        sinco.1700 D9 P2 m. a/ D) S4 e7 |( b9 L
  24. *******************************************************************************/
    * y' Y" e( b7 W' b/ z7 k8 r
  25. void IIC_Init(void)
    ' V  o. o' R* l, O, I2 F
  26. {        * E, `: O3 j! J& R- h  J) `
  27.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟
    6 W7 m' R; Z- c6 k4 h' ~
  28.         ' M. A+ x$ j; F0 A0 B1 `- q# q
  29.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入
    1 `6 n8 t4 Z' l
  30.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的! @2 [) I7 Q: I+ V
  31.         PE_CR2                 &= 0xf9;                       
    / @) }$ c. a( U9 E& \; O- G; d
  32.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟
    9 I* |2 A# z8 \$ h" _8 x; q5 h4 U
  33.         I2C_FREQR   |= 0x10;                //时钟为16MHz& G: x0 V/ q! ~5 Z/ g, X/ F
  34.         //I2C_FREQR   |= 0x01;                //时钟为1MHz  j9 \4 V- {0 B9 a  ~
  35.         I2C_OARH          = 0x40;                //7位地址模式. V% T/ B* h& R: R
  36.         I2C_OARL     = 0xa0;& W0 s1 \1 V+ D& G3 V+ B, y
  37.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns
    2 e6 |- [- D( g/ I- D& |" ~: A1 w
  38.         I2C_CCRH    |= 0x00;                //I2C为标准模式
    6 z# M6 Y2 O" n8 r; a. u
  39.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11
    # K$ u' l, a0 R1 n. R* m
  40.         //I2C_TRISER   = 0x02;                //时钟为1MHz时
    . \8 P$ |  j- u1 P
  41.         //I2C_ITR          |= 0x00;                //禁止I2C中断
    ' K6 F% a  l( a/ @9 O+ V4 U
  42.         //I2C_CR2     |= 0x04;                //开启应?+ f9 w( H" p& ~& B: Z) B
  43.         I2C_CR1     |= 0x01;
    + W6 E! d6 A9 p5 t
  44. }
    2 i2 j  [0 Q  R; b2 H  g1 {
  45. % P& F* w  k9 F: y3 t; w$ n0 Y
  46. /*******************************************************************************1 _( Y& Y$ C6 o# I1 n* v
  47. 函数名称:        void IIC_Start(u8 addres)
      o5 `3 [# E8 V7 F
  48. 函数功能:        I2C start function
    : \* y# m% K# [3 I; a
  49. 输入参数:        null1 L' e3 ]6 B3 `1 e; f- }
  50. 输出参数:        Device Address% z) \$ L6 q" m( _) c
  51. 编写日期:        2018.09.06
    $ ]2 v, p% i+ K
  52. 代码作者:        sinco.1708 L. f# D, ?5 n% g
  53. *******************************************************************************/; N3 _4 m) N. M1 u  }
  54. void IIC_Start(u8 addres)
    - M  g" Z) \) n+ d; l# v3 p
  55. {4 L$ H0 K4 h6 S
  56.         while(I2C_SR3 & 0x02);                //检查总线是否空闲7 f- K# H/ V7 d2 O; r! y
  57.         I2C_CR2 |= 0x01;                        //产生起始信号5 C& @  S# ]& Q0 O! O
  58.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成" Q. x& v5 q0 `* `/ d: ]1 Y# s' Z$ ]
  59.         I2C_DR = addres;                        //发送从器件地址, W7 c8 L* W4 a+ t, z5 w
  60. }4 B  v$ p' u1 q* D. D5 ?0 a* R8 u+ u) e

  61. 4 s1 h5 Y6 q& q! N$ _
  62. /*******************************************************************************( c* Y! S4 s+ L( C. m8 f0 H
  63. 函数名称:        void IIC_Stop(void)
    5 _& p5 w( [7 u' Z% A
  64. 函数功能:        I2C stop function* B+ }+ N9 d$ T* K- @! I; v
  65. 输入参数:        null/ q+ {+ p3 J2 D. X( I9 `
  66. 输出参数:        null" W( p6 _& k) E9 }
  67. 编写日期:        2018.09.06: `) W6 d8 k* `3 u: C
  68. 代码作者:        sinco.170+ x5 S0 D$ l8 ^
  69. *******************************************************************************/
    ( p/ \- Q" u/ g7 `4 y
  70. void IIC_Stop(void)
    & Z' Z/ F8 r1 G
  71. {8 I& f" o$ x9 @& R9 M
  72.         //while(!(I2C_SR1 & 0x04));        //等待发送结束
    3 o, ~3 M) a; J2 P& L/ N) F
  73.         I2C_CR2 |= 0x02;                        //产生结束信号# A1 R4 z7 F% \/ M9 \
  74. }4 C9 m0 B* \8 b, [# F9 _8 q
  75. ! @$ \; O1 \$ y6 r* |
  76. /*******************************************************************************
    1 Z3 h) E/ N/ J- W) `! l
  77. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)4 F. J0 m: W# z0 O% ~+ i; x! W
  78. 函数功能:        I2C发送一个字节
    . [' H! M! ?. \
  79. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据9 L/ U3 i+ {/ h" J; P4 t' |) P
  80. 输出参数:        null4 x  G! P% h+ d; D$ ^" c
  81. 编写日期:        2018.09.06
    % M+ _: A& z& [  q7 }2 W4 z, s  ?' w
  82. 代码作者:        sinco.170
      ~& m. U0 k* u* k
  83. *******************************************************************************/
    1 S& R/ u4 R4 a
  84. void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    / |  a: b0 j% u' `0 W
  85. {5 h/ N1 w0 D. C* G6 ~) I
  86.         u8 temp = 0x00;. G- M9 I0 D, l
  87.         " F6 i, \% X% B8 ^( W
  88.         IIC_Start(addres);                        //
    & L9 a0 J/ g. W, M- Q0 i0 \7 t9 B
  89.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成2 z: w: |( c/ U, n2 ~* S
  90.         temp = I2C_SR1;
    7 D7 c6 i. }3 _+ [' B! ?
  91.         temp + I2C_SR3;
    ! D+ B4 i- X; k  u- I5 C
  92.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空6 S" {% @. C3 A8 c& b6 i
  93.         I2C_DR = addr;                                //发送写入地址到数据寄存器, a7 e3 q: [3 ^" n' v% Z
  94.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成
    $ q. G% K# W2 p1 Q$ ]: A
  95.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空% }  R3 F7 L3 G' r/ r
  96.         I2C_DR = dat;                                //发送数据
    . _. r8 g: R9 Y4 V# `  s% H
  97.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成/ i2 [, m0 N8 M+ k- Q8 a2 b
  98.         temp = I2C_SR1;                                //清除标志位
    ( E' ]' V9 W7 L- c
  99.         temp = I2C_SR3;# e$ i( d4 n; \  ^+ s! g3 I  \  {
  100.         IIC_Stop();" p3 C) A. m' A+ {3 z" v
  101. }" i- S  |2 {: N) p5 Z

  102. : S  u& c7 ]/ v; W5 H9 l
  103. /*******************************************************************************. D7 S! q4 |6 _5 y7 Z; |. x* l" N
  104. 函数名称:        u8 IIC_ReadByte(void)
    + s$ o! Y4 {# n! r) @
  105. 函数功能:        I2C读一个字节
    # P6 |$ w! b5 D/ g. J4 `
  106. 输入参数:        null6 T: C' W7 n2 ]
  107. 输出参数:        返回已读到的数据
    ! r) |  b' P- m- e; T/ _! {; B
  108. 编写日期:        2018.09.06
    2 u6 k% }9 A% _1 `4 \7 M6 P% z
  109. 代码作者:        sinco.170
    # T+ E8 k/ d. Z" ^6 t2 H
  110. *******************************************************************************/7 _7 e# D  r9 M- u' {
  111. u8 IIC_ReadByte(void)
    1 T0 W! ]' I9 L% {4 X: \6 \6 p6 a4 r
  112. {
    9 Y3 m1 m6 {' K6 L) F
  113.         2 s  j7 X( ^3 a/ e. R# A) v
  114. }1 g: k  B1 `) _! U
  115. ) K' I2 S& _, ]' h
  116. void IIC_SendNByte(u8 txd)9 y; r0 S# [. B3 I* W9 H* V2 k
  117. {6 X6 W2 H" }! o- ?4 K8 A, A
  118.        
    $ c, f# n, p8 e% L5 N' [
  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
楼主好厉害啊8 x: O: N8 P% M4 v" q2 ]0 @0 V
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版