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

新手STM32学习笔记

[复制链接]
私奔 发布时间:2009-1-4 12:05
作者:阿九
# ?- d; M7 I* F/ b3 g上周4终于买了块万利的STM32开发板,武汉本地的万利代理处买的,之前问了好久都没货,这次终于有了:)199还开了发票,尽管老板是分不愿意,没利润阿,再开个票亏了。。。 / p& H* n$ I6 f& a! J
代码我做了颜色高亮,看起来很舒服:) ; k; m( ]- W& `7 S
咱也就初学者水平,目前对STM32还处在学习各种模块的阶段,so,高手们请多多指点,别介意小弟啰嗦把这点P东西都放网上~~
9 I) \* h4 J, R# f* i学这高级单片机,是想过几天把它用到雕刻机的控制上,解释下G代码呀,插补个圆弧直线啥的,顺便还和PLC通讯通讯:) 3 T% x4 h6 Q, b7 y, m

/ O& M2 U" y& x# l* WSTM32笔记(零)我的STM32工程模板
/ H7 a8 |' R9 E0 l, M
5 U* ^/ r# `5 p* L/ M" G1 U# A  这是我自己的STM32工程模板,其实和网上所有的都一样,其中包括IAR和MDK两个文件,各自包含FWLib2.0,解压缩后修改文件名即可使用。
5 n& |5 m( o6 u  用法同网上的其他文件一致,用户代码在user文件夹下,main.c和stm32f10x_it.c
( ?  ]: `- u0 R$ N6 n2 z  传一份上来供大家使用:)
$ I3 o/ g" B! @ 其中底层的SPI总线对SD卡的操作在SPI_SD_driver.c/h中,而FATFS的移植文件diskio.c中对磁盘的操作函数中将调用底层的操作函数。下面是一些底层操作函数:
% a  w' I7 ~8 ~u8 SPI_ReadWriteByte(u8 TxData);                                             //SPI总线读写一个字节1 \2 i3 p. w: U$ F8 x7 U' |1 g3 [6 E
u8 SD_WaitReady(void);                                                           //等待SD卡就绪
) N$ c) A  E  g9 H! fu8 SD_SendCommand(u8 cmd, u32 arg, u8 crc);                      //SD卡发送一个命令( b  r" J5 V0 ?; W1 W
u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc);  //SD卡发送一个命令,不断线
$ ^. j, I# ?  l6 i# V# ~u8 SD_Init(void);                                                                      //SD卡初始化/ d$ ]/ P9 F! p# t$ ^" v+ b
                                  4 V& q# u4 H. w% I# m% w* k6 |
u8 SD_ReceiveData(u8 *data, u16 len, u8 release);                   //SD卡读数据
  e. M4 a+ a$ L& ju8 SD_GetCID(u8 *cid_data);                                                   //读SD卡CID" |6 Y2 W% F$ \# A. G
u8 SD_GetCSD(u8 *csd_data);                                                 //读SD卡CSD
) b0 T0 @( |+ Z8 Uu32 SD_GetCapacity(void);                                                     //取SD卡容量; p* u: `) _8 \

; V, ^9 B8 z, ku8 SD_ReadSingleBlock(u32 sector, u8 *buffer);                      //读一个sector
4 L& [! D% U* e# Y0 a: D0 bu8 SD_WriteSingleBlock(u32 sector, const u8 *buffer);           //写一个sector
. R; U; {1 f; [$ Z; Vu8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count);       //读多个sector
, Q; q3 c8 M9 I; J" _u8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count);  //写多个sector
6 e0 M5 a% ]' Y' a& @$ C& N: f
; Z. m) |- P( p. H2 A: E  ~" w  这是diskio.c中的一段代码,在disk初始化中,我们调用了SPI_SD_driver.c中的SD卡初始化函数。
9 p5 f& H% h% O8 A: M) @; R4 pDSTATUS disk_initialize (& O; L! O- u$ X
    BYTE drv                /* Physical drive nmuber (0..) */
. ?2 \, ]) e# R) A. c)7 x4 X8 N9 Y( d2 F" F- q
{9 G  a/ I0 _3 @
    u8 state;$ k  f1 A1 s" m) a1 k, \

/ I7 n7 x2 j6 T$ F1 m  n6 C# Y    if(drv)6 A( P$ |8 Y+ O8 z
    {% h/ X' ?$ \/ D5 y! g% W
        return STA_NOINIT;  //仅支持磁盘0的操作
5 E" R6 [# o5 \+ q: b$ E% o" b    }
4 T# d# |2 ]  i1 v8 [1 t5 \) \4 U) N$ i
    state = SD_Init();2 q6 r: r6 L9 [
    if(state == STA_NODISK), t$ h6 ]6 [# j8 y; p1 O5 s
    {
0 ]5 P: I6 |: ^8 A" L+ ^        return STA_NODISK;) X0 t1 K) I; c6 U* P! [% `
    }
+ `5 B& g6 x" k1 F+ S0 l/ n    else if(state != 0)8 S2 i3 w+ `" B8 N* t6 k, H
    {7 x  C( ~: k( n( Z6 M
        return STA_NOINIT;  //其他错误:初始化失败$ _0 b) i$ N# y) P: V4 R; t' u- J6 W* j
    }
. x" p) W+ f7 k" F3 G1 K8 J$ g7 J    else5 }: I  K# t0 o. ]" _4 t( M/ H) |
    {
/ I, h6 }5 u4 {* f        return 0;           //初始化成功
4 ~& z+ x( B+ h$ y    }
0 c2 a! |1 y, h9 }3 V+ O( X}; k9 {/ }4 N: x4 `  R/ A% B# E6 T
  
+ c" p5 [0 S8 a" i  I1 P+ X* C1 \$ g  总之FATFS文件系统具有很高的可移植性,经测试,在STM32的18MSPI时钟下,读文件的速度在每秒300K以上,写文件也有100多K的速度,应该说基本满足了嵌入式工程应用中,对磁盘读写的速度要求。如果进一步优化SD卡读写代码,速度应该还会有一定提高,同时还要注意的是FLASH自身读写速度没有ram那么快,通过更换SD卡发现读写速度和卡本身有直接的关系,所以应该尽量选择速度较快的卡。
收藏 评论3 发布时间:2009-1-4 12:05

举报

3个回答
zhanglmwuhan 回答时间:2009-6-13 15:23:47

RE:新手STM32学习笔记

好,赞一个,呵呵
zhanglmwuhan 回答时间:2009-6-13 15:24:19

RE:新手STM32学习笔记

好,赞一个,呵呵
huangsongyou 回答时间:2009-12-5 11:04:28

RE:新手STM32学习笔记

学习。。。。。。。。。。。。。。。。

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版