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

新手STM32学习笔记

[复制链接]
私奔 发布时间:2009-1-4 12:05
作者:阿九
& ~5 K, u* `( `' b1 k. n- x上周4终于买了块万利的STM32开发板,武汉本地的万利代理处买的,之前问了好久都没货,这次终于有了:)199还开了发票,尽管老板是分不愿意,没利润阿,再开个票亏了。。。 0 J% n! Z6 y' a+ }0 U
代码我做了颜色高亮,看起来很舒服:)
/ N& F2 N4 k" i, U! ]咱也就初学者水平,目前对STM32还处在学习各种模块的阶段,so,高手们请多多指点,别介意小弟啰嗦把这点P东西都放网上~~
; w" b7 U7 u  ^# V$ K7 v& y学这高级单片机,是想过几天把它用到雕刻机的控制上,解释下G代码呀,插补个圆弧直线啥的,顺便还和PLC通讯通讯:) " z. i1 f0 D/ B. ?/ Z

2 y* G) S9 M6 Y8 ]STM32笔记(零)我的STM32工程模板
- p, q' Q% V5 ]: p% v6 L6 G% I9 g
  这是我自己的STM32工程模板,其实和网上所有的都一样,其中包括IAR和MDK两个文件,各自包含FWLib2.0,解压缩后修改文件名即可使用。 - q9 G  P) V7 h2 E$ F% s
  用法同网上的其他文件一致,用户代码在user文件夹下,main.c和stm32f10x_it.c " w# x" a9 `; }3 l4 e: h* e
  传一份上来供大家使用:) , D3 [. t" `7 ^% j* O3 t' p. [
 其中底层的SPI总线对SD卡的操作在SPI_SD_driver.c/h中,而FATFS的移植文件diskio.c中对磁盘的操作函数中将调用底层的操作函数。下面是一些底层操作函数:* X+ `$ S- Q) @9 |$ Y( Y0 ~) N) L
u8 SPI_ReadWriteByte(u8 TxData);                                             //SPI总线读写一个字节
1 L" q/ Z; Q* Q1 {u8 SD_WaitReady(void);                                                           //等待SD卡就绪1 P5 j" n! p- Q
u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc);                      //SD卡发送一个命令
- R, |! s) n" ~! c* n$ a: _u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc);  //SD卡发送一个命令,不断线
# n7 c. P% C% H( N5 m" F/ Qu8 SD_Init(void);                                                                      //SD卡初始化- ]4 \1 J8 x7 h$ y; X$ D
                                  ! R" a) ^6 _! L
u8 SD_ReceiveData(u8 *data, u16 len, u8 release);                   //SD卡读数据+ T/ g+ c5 [; \6 B+ }
u8 SD_GetCID(u8 *cid_data);                                                   //读SD卡CID
/ @2 c: i5 O# o1 [+ H  [) ou8 SD_GetCSD(u8 *csd_data);                                                 //读SD卡CSD( I' U- T; D. J* r5 @, `7 P) q
u32 SD_GetCapacity(void);                                                     //取SD卡容量
# G+ c7 O, S) m) D" b' t
& D! D) C9 J0 X: M' L& bu8 SD_ReadSingleBlock(u32 sector, u8 *buffer);                      //读一个sector
7 Z* I3 O9 ?: [9 F7 `u8 SD_WriteSingleBlock(u32 sector, const u8 *buffer);           //写一个sector
' _9 P5 J: |/ K0 r' B! pu8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count);       //读多个sector
: d, ~- A: H0 C( au8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count);  //写多个sector
3 ]! y/ g- ^* A% D4 N. h
  c$ o  B! S0 c- t  这是diskio.c中的一段代码,在disk初始化中,我们调用了SPI_SD_driver.c中的SD卡初始化函数。
6 _9 }3 y2 F6 }$ \$ yDSTATUS disk_initialize (# z+ f# y% _' p' Z2 {) s# j
    BYTE drv                /* Physical drive nmuber (0..) */
: C9 c- Y; `) m). m- Z0 H8 ~4 f: @7 F
{
& [! }+ q! g, z/ c6 f    u8 state;. E# f- y/ A. o$ t: A6 Y6 B
3 `+ T- u% q0 B
    if(drv); h, Z4 [! ]& g$ S  R
    {; ]" v" v. s4 H. K/ V+ Z
        return STA_NOINIT;  //仅支持磁盘0的操作
, |' @- I2 H2 K5 E" [" m    }' }& c/ Y" j# ^5 B* @& G2 V

, B, {* b: ^2 p. A/ Q    state = SD_Init();6 C- F1 D% B* \6 l6 l
    if(state == STA_NODISK): [$ @; r3 ?2 x& w: V/ f, d: L* d
    {
, K  g7 ?) h' ?0 g3 [% S9 H9 B; L        return STA_NODISK;" z7 @5 ]5 Q  _+ U& w8 `
    }  v- U4 n/ B2 d# ?8 n
    else if(state != 0); \3 e# x% G6 x% ?
    {
& l" O! u7 k6 y2 J- P- \) X3 Z        return STA_NOINIT;  //其他错误:初始化失败
0 a1 J# L" h/ I* [    }, b+ Y7 l. }, d
    else2 ]9 [9 b5 E( [
    {
; p; }7 P( M( V1 ~- `& ]        return 0;           //初始化成功+ r% x/ O  @" ]/ H6 W
    }
7 ~. ]) u. m" S}0 W* A4 c6 C) R3 j2 |' ]
  
& b  [, v; L* ^- ?  总之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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版