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

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

[复制链接]
sincomaster 发布时间:2018-8-3 17:54
本帖最后由 sincomaster 于 2018-8-3 18:03 编辑 - H0 }  K  G$ ^

. _* F( c) |3 R" D近段时间才学完C语言,现在开始学习单片机.
; k! E& {( {0 J# r3 |/ c在这贴子分享学习过程和遇见的问题,有什么不对的地方还请多指教.
$ Q3 b$ {" ~2 {, t. r4 f开发板:STM8S DEV BOARD(自己做的)
- h& [( e2 D" G7 e. h* Z- j: g主控:STM8S207CBT6
: j  S- N# l, V& J显示:OLED(SSD1306),支持IIC和SPI两种接口
3 j- Y2 z+ y2 F: E, \7 f( M按键:TTP223-TOUCH KEY+3X4矩阵按键(原理图设计有误,使1.5.9键值相同)
( R  ^; {5 J( E5 c5 S3 a接口:含24L01无线接口,红外接口,18B20接口
( a; n0 a8 c; Q! y电源:UCB5V供电,支持输出5V和3.3V
3 n8 p+ r/ G$ E$ p8 }指示:GPIOB外接8个LED灯! T1 z% G7 \" q& i, L! f* D
语音:板上有语音电路
' I- s- W0 s" A' ]) c1 l5 e9 h音频:喇叭和蜂鸣器
% A" `, Q% d. d. q5 ?6 M晶振:HSE(16MHz)- }& P: a5 w  u% C8 r4 H+ B
时钟:HYM8563+ D5 o0 [4 U$ ~6 e# H* D
存储:AT24C64D! T- o* C9 _. y2 X3 y3 G
字库:GT20L16S1Y) m. L0 k" [* x2 h5 ], o9 u1 B7 O9 g
赞 收藏 评论15 发布时间:2018-8-3 17:54

举报

15个回答
sincomaster 回答时间:2018-8-3 17:56:33
本帖最后由 sincomaster 于 2018-8-3 17:57 编辑 0 N1 W4 u8 v3 t* t/ D" q* u

! E  G# B0 h& u# J& u这是自已做的开发板:
" Y- _3 O8 M. ^% K' k+ k& X
$ u) [# D  M9 l7 E6 m
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 编辑 ; R) ]) b+ _/ }6 v9 q  G

. e% C6 n2 x- ^% {) L" y) GSTM8S的延时程序用示波器测试了一下,和自已算出来的有误差,今天测试和前两的时间有一点点差,不知是不是我切换到外部时钟的原因,数据手册上说的1/2周期指令不清楚是算多少,我是按1周期指令来算的,  W' X  j9 b  Z$ _1 x
网上也有说16M时钟算出来有差,但8M时钟不会差,我没去试
/ H& G' M3 ]% j5 D还有就是5us延时是,IO推挽输出波形较好,用开漏PE1输出上升沿很慢,不清楚是否正常,PE1外部上拉4.7K.  r) [! _+ v7 H2 E" p$ A
/ f5 U1 z* X) L0 x' C0 }

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
3 s' h2 D9 d% }" @7 d% h这是自已做的开发板:

) A: K; Z# w& Y4 b% J6 E板很漂亮
sincomaster 回答时间:2018-8-12 23:55:47
本帖最后由 sincomaster 于 2018-8-12 23:58 编辑 % M7 Z% n2 {8 D, Y, O3 N0 x: R

, _1 l0 v( A9 J经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要给我到时传上来,7 @+ {# j, S& T, m7 M
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$ D5 y+ I$ C* @+ s5 ^
sincomaster 发表于 2018-8-12 23:55
$ Q0 p; S6 W$ x/ P* P+ J: b经地几天的努力,IIC驱动SSD1306 OLED终于成协,开心中........中间有很多问题,都 一个一个解决,如果有人需要 ...
( q( D' T0 G7 l  [$ r( Q( s6 I3 B. q
楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
' H; o/ Y+ o3 l9 I
. ^, l) {2 D& G$ @* Q: j0 H, O; I; K另外你遇到的问题能不能传上来,我学习借鉴一下,先谢谢了
/ H' s# S2 w- x0 O/ U
sincomaster 回答时间:2018-8-17 17:13:17
iyumi 发表于 2018-8-16 17:25. `; z5 Y9 X* q- [# ~. p
楼主,请教个问题,STLINK V2使用的时候你的开发板单独供电了吗,不单独供电有什么影响呢?
" v  |3 ?4 c- a/ b* B$ |% R/ Q) M# q* d1 g0 l& C' V' T
另外你遇到的 ...
) ?8 |0 J9 Y+ s3 \* Y8 N
我自己有两个ST_LINK,1个是正版,另一个是30几块钱的,两个我都拆开过,ST_LINK内没有给SWIM这4根线供电,所以开发板要有电才行,我是自学,所以学习中有很多问题,自己慢慢解决,我用硬件IIC,刚调试也碰到网上说的停在while(!(I2C_SR1 & 0x02));这句就不动了,一时半会也说不清楚,我现在也还没解决调用字符数组的问题,
sincomaster 回答时间:2018-8-17 18:03:00
共享一下我的IIC代码,如有问题还请大请不吝指正,谢谢!
  1. /*******************************************************************************
    3 r, w8 o$ P7 @" V% S- N2 I0 h- c
  2. 文件名称:        I2C文件
    / A' |% i& f+ B4 a
  3. 函数功能:        I2C Driver Code
    - |" U+ ^& A+ H$ Z, c; s) E
  4. 软件平台:        STVD4.3.12. v. ^0 N' H1 B
  5. 编写日期:        2018.09.064 A# L) @" N' J9 @
  6. 代码作者:        sinco.170
    1 Z/ `7 @( B8 l5 h, V3 ]; C; Q0 S  j5 i
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)
    4 \4 D$ W4 L3 X1 |
  8. *******************************************************************************/0 K* f- o/ ~( \: u
  9. #include "stm8s.h"
    & b( Y$ p, C- R
  10. #include "iostm8s.h"4 v# s% d9 [) W; Z8 h7 I
  11. #include "iic.h"/ F; F1 b. o2 @6 h; K. N
  12. $ x# M: N, j# M
  13. //http://bbs.mydigit.cn/read.php?tid=2482933
    $ v8 s* f& Y- `
  14. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/
    ( o! R( u& @/ H3 O3 s
  15. //http://www.openedv.com/thread-70958-1-1.html4 j: r- |* P/ m( c- K" R
  16. //http://blog.csdn.net/DevinTT/article/details/748548511 C" k  F. c+ m& D+ f# K  x
  17. /*******************************************************************************/ N8 G" h- o& O) H/ U
  18. 函数名称:        void IIC_Init(void)
    0 _; l8 q8 i* v  P
  19. 函数功能:        I2C初始化
    $ n0 r: J2 u9 X6 w) {" q# X
  20. 输入参数:        null' Q+ [5 v* w$ s/ u( l" B
  21. 输出参数:        null
    3 \( y, Z# T8 O' W0 H
  22. 编写日期:        2018.09.06
    ; }- A1 |$ |! u3 a, ^/ ^
  23. 代码作者:        sinco.170
    8 o% R, E. ^4 G$ `( _
  24. *******************************************************************************/; p6 K6 l# }7 o7 Y8 T
  25. void IIC_Init(void)! D, z6 t7 I" H1 D5 _
  26. {       
    9 x" u. {1 J* O3 y
  27.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟
    3 X, E: r+ I5 x: G" x5 J
  28.        
    $ q: D& k# @; t7 h
  29.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入
    + k% n( l0 r8 b! V7 b/ G# n
  30.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的
    / h- m8 m' ~# [, _5 i/ b+ \9 w
  31.         PE_CR2                 &= 0xf9;                        , U) \3 a. F7 i# a
  32.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟
    1 D) G4 X" M( G* [" O) T
  33.         I2C_FREQR   |= 0x10;                //时钟为16MHz
    , n5 A& c5 [( q* e& R3 k
  34.         //I2C_FREQR   |= 0x01;                //时钟为1MHz
    8 I! ~8 p4 h; Q/ O; ?
  35.         I2C_OARH          = 0x40;                //7位地址模式  t- N% J4 P- r$ C- j- A' Z" D  P
  36.         I2C_OARL     = 0xa0;
    9 |$ ?5 `! E  R- ~: H' ^% q6 g! o3 e
  37.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns
    ! Q: q/ F. D. A( f1 h4 R
  38.         I2C_CCRH    |= 0x00;                //I2C为标准模式
    & n5 [6 _9 w6 w8 O& b) J) Y5 f
  39.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11
      b# h5 T  Y3 Y$ j; c8 d' f7 R
  40.         //I2C_TRISER   = 0x02;                //时钟为1MHz时
    + T1 c0 T' @" E- I: m5 V
  41.         //I2C_ITR          |= 0x00;                //禁止I2C中断8 O& ?+ t1 r  V5 J: `5 Q# |
  42.         //I2C_CR2     |= 0x04;                //开启应?" B  j6 B+ w, f' f. U
  43.         I2C_CR1     |= 0x01;1 W( w2 b9 _5 A6 q6 `1 ]- O
  44. }
      Y$ i8 O. n0 u# z* a( C. k
  45. 0 \! x8 M# t( X0 {2 F
  46. /*******************************************************************************
    ' ^0 F/ L7 ~$ M! I! f; R5 u
  47. 函数名称:        void IIC_Start(u8 addres)
    % M) }& i4 u1 y* B
  48. 函数功能:        I2C start function) W# Z% O9 e& F! u$ _: s8 M- T
  49. 输入参数:        null: f+ C- q& s- j) O5 A8 P9 x6 h
  50. 输出参数:        Device Address9 c0 k! a) ^& k4 c" Z
  51. 编写日期:        2018.09.061 i  K* n* j' _# U2 V1 w
  52. 代码作者:        sinco.170
    & V+ w; O; k" b" w" O8 k# I; |
  53. *******************************************************************************/; l- }3 ]1 P4 I8 m+ b* R
  54. void IIC_Start(u8 addres)" Q7 [' n& V6 Z9 j0 m/ p
  55. {
    ( ~) q4 I1 U1 ?4 U' H- U8 I
  56.         while(I2C_SR3 & 0x02);                //检查总线是否空闲
    & P. I  w# b$ l3 {
  57.         I2C_CR2 |= 0x01;                        //产生起始信号
    . T+ J- T6 `" I
  58.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成
    * i- m. Y: I; |8 e9 R) \- n) l
  59.         I2C_DR = addres;                        //发送从器件地址
    $ @. @- v( B) {
  60. }
    7 q  J' e3 L- Q
  61. 1 r; s4 j( Z  b$ P, P- ?( q
  62. /*******************************************************************************
    3 V. Z. n+ K0 `0 k& r8 ~
  63. 函数名称:        void IIC_Stop(void)- ~1 Y2 K* \: y2 c4 Y
  64. 函数功能:        I2C stop function
    1 C! L6 E5 r- C0 B
  65. 输入参数:        null
    3 R5 Z2 g5 d+ v6 p& g  E
  66. 输出参数:        null
    0 r, d% f2 I5 L+ |
  67. 编写日期:        2018.09.068 S( L+ F$ m. e" b
  68. 代码作者:        sinco.1702 H/ ]; ]. z% l( i
  69. *******************************************************************************/- B+ a8 h* ]! Q* W( @( N7 ]
  70. void IIC_Stop(void)  h) \/ p7 m4 N! g& }1 [- w/ E
  71. {) ]' K: Y( d/ g2 K- o
  72.         //while(!(I2C_SR1 & 0x04));        //等待发送结束3 f0 i9 V$ R7 Y) B* p4 D) ?! e
  73.         I2C_CR2 |= 0x02;                        //产生结束信号7 O: C/ [& ]) s% P$ @
  74. }" T+ c( @/ z0 U  q# k5 R7 S+ V1 J
  75. 7 `6 a) y+ L% @  V2 h  }: G: [( z# x
  76. /*******************************************************************************! @& I1 R: c7 }- ?* A* n" w8 E
  77. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    1 R( A  R# M9 d" r. m2 U# y* l% A
  78. 函数功能:        I2C发送一个字节
    " `: f+ w/ Z6 _5 e2 `
  79. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据
    " L( v0 ~; P: v9 d
  80. 输出参数:        null/ p3 h3 C4 m9 z1 B" i# N0 H) ^9 V
  81. 编写日期:        2018.09.06
    , O- j/ o4 K% T4 p3 P
  82. 代码作者:        sinco.170
    ! o7 x, l# t! D5 {  b; ^& `& b) u
  83. *******************************************************************************/; E/ u9 p! o9 T: Y( @" C: R* J& g: t& w
  84. void IIC_SendByte(u8 addres,u8 addr,u8 dat)
    $ n4 g7 c  W4 |% F% |1 l
  85. {6 t0 @" M( q' H2 \* N! U
  86.         u8 temp = 0x00;
    + D& X. K' ?4 g5 K9 w1 V, a9 C. V( g
  87.         - s5 N, I' s; o  D
  88.         IIC_Start(addres);                        //( U. X2 B, M' X( Q8 p$ B, E
  89.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成* `, D; H! H7 V' O- |
  90.         temp = I2C_SR1;
    - C' q" m. Z: ^( K- `+ m# P" j0 }
  91.         temp + I2C_SR3;
    ; O2 H' U3 Q4 P) M$ J- T: u( J
  92.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空! U: O3 q+ T$ l# e/ v
  93.         I2C_DR = addr;                                //发送写入地址到数据寄存器7 ~9 @+ o* l$ ^
  94.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成
    ! K: S& O3 M$ h! P, T% x
  95.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
    2 r: T% x0 \: S  V7 D
  96.         I2C_DR = dat;                                //发送数据
    & A( [  P. h( l3 ?0 j
  97.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成; N& v$ Q2 n' ^$ O/ {3 r3 {
  98.         temp = I2C_SR1;                                //清除标志位$ k; L2 l. h7 R: D2 u  |* f3 k4 M
  99.         temp = I2C_SR3;
    1 z" t" M; x! \
  100.         IIC_Stop();
    - i' c9 ~/ ~0 w# {! U
  101. }
    ; M# Y( _! t) B# h) C* W- }3 V
  102. 6 p) s& o6 V1 Z. P- N1 _  E
  103. /*******************************************************************************. f: Z" N4 ]3 X' M6 j
  104. 函数名称:        u8 IIC_ReadByte(void)9 ^1 l& U. \7 z  v/ u# f
  105. 函数功能:        I2C读一个字节1 f4 }. o0 s3 j0 \: B* o
  106. 输入参数:        null" G! C8 t$ M8 e1 U9 y* N" h9 h
  107. 输出参数:        返回已读到的数据) [4 F- C" q8 x. \! X
  108. 编写日期:        2018.09.06+ ~4 D( W- G8 a6 e# k7 S4 ?* N) V
  109. 代码作者:        sinco.170
    * J( J( d8 ?6 _7 g2 C
  110. *******************************************************************************/
    & g' `- s, Z" {/ b
  111. u8 IIC_ReadByte(void)( q2 J- Q9 R: r) Z& L
  112. {
    & X9 {, h  f- s4 g- `" i
  113.        
    / p0 j, ]8 g" O: b6 {
  114. }
    * s+ K3 A* @; x5 J7 m1 E( F6 T7 Z

  115.   L+ p$ x0 T6 a9 w! V
  116. void IIC_SendNByte(u8 txd)
      p1 p* G& w8 X
  117. {
    3 |* e- V1 A2 E) a
  118.        
    % E" k& V7 |5 j) {+ 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
楼主好厉害啊
+ q5 U1 O' W5 }' I
12下一页

所属标签

相似技术帖

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