|
作者:阿九7 i% O o* ?9 w. K7 u 上周4终于买了块万利的STM32开发板,武汉本地的万利代理处买的,之前问了好久都没货,这次终于有了:)199还开了发票,尽管老板是分不愿意,没利润阿,再开个票亏了。。。 代码我做了颜色高亮,看起来很舒服:) ( k7 J2 n) ~1 \9 W) ] 咱也就初学者水平,目前对STM32还处在学习各种模块的阶段,so,高手们请多多指点,别介意小弟啰嗦把这点P东西都放网上~~ 学这高级单片机,是想过几天把它用到雕刻机的控制上,解释下G代码呀,插补个圆弧直线啥的,顺便还和PLC通讯通讯:) 9 w( F4 x4 t% ^; O1 ?: p 9 ] t+ V) }2 {: G* r+ h STM32笔记(零)我的STM32工程模板 + {* ?+ Z, |( V: B( S x 这是我自己的STM32工程模板,其实和网上所有的都一样,其中包括IAR和MDK两个文件,各自包含FWLib2.0,解压缩后修改文件名即可使用。 * t* v, X$ D- A9 P* x! n7 A 用法同网上的其他文件一致,用户代码在user文件夹下,main.c和stm32f10x_it.c ; D. v% c; V( E+ g 传一份上来供大家使用:) 其中底层的SPI总线对SD卡的操作在SPI_SD_driver.c/h中,而FATFS的移植文件diskio.c中对磁盘的操作函数中将调用底层的操作函数。下面是一些底层操作函数: u8 SPI_ReadWriteByte(u8 TxData); //SPI总线读写一个字节 u8 SD_WaitReady(void); //等待SD卡就绪" J' s3 ?% R$ K u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令' U' I( R7 U$ I8 H, l$ L! h u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令,不断线 u8 SD_Init(void); //SD卡初始化) }7 e$ t! j- x* b: a% X1 M u8 SD_ReceiveData(u8 *data, u16 len, u8 release); //SD卡读数据 u8 SD_GetCID(u8 *cid_data); //读SD卡CID0 z& m& o, R" e3 [ u8 SD_GetCSD(u8 *csd_data); //读SD卡CSD! E! {, |( I3 `4 _ u32 SD_GetCapacity(void); //取SD卡容量 u8 SD_ReadSingleBlock(u32 sector, u8 *buffer); //读一个sector& ^0 W8 I1 b* p3 {5 [* u; _7 ` u8 SD_WriteSingleBlock(u32 sector, const u8 *buffer); //写一个sector% I$ U* X3 Z0 Y( J! I7 R% l u8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count); //读多个sector" s7 C2 M& Z6 T; T2 e) f u8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count); //写多个sector 这是diskio.c中的一段代码,在disk初始化中,我们调用了SPI_SD_driver.c中的SD卡初始化函数。 DSTATUS disk_initialize (& i5 \1 c' F" o BYTE drv /* Physical drive nmuber (0..) */+ F: ]0 P0 s6 o+ ] ) {: ^8 X# D1 y6 L$ X; K. }$ F4 Q u8 state;0 o4 \" w2 w, w7 z' X+ `8 i; X9 |# \ if(drv), F, h: q; O2 c* \ {9 T' V2 \) x* X8 E% O; ]: I return STA_NOINIT; //仅支持磁盘0的操作 }1 l, P# B/ m; | state = SD_Init(); if(state == STA_NODISK) { return STA_NODISK;, L8 b \& H: G }5 J" X1 y- w$ X else if(state != 0)6 q, B# W. Z+ ^) Y, ] L [$ _ { return STA_NOINIT; //其他错误:初始化失败6 j& v# v" @3 i" J7 D& H } else( Q+ B/ T% g) ]% B( H2 M5 g% _ { return 0; //初始化成功 } } 5 t& q. o' Y. V5 ~ 总之FATFS文件系统具有很高的可移植性,经测试,在STM32的18MSPI时钟下,读文件的速度在每秒300K以上,写文件也有100多K的速度,应该说基本满足了嵌入式工程应用中,对磁盘读写的速度要求。如果进一步优化SD卡读写代码,速度应该还会有一定提高,同时还要注意的是FLASH自身读写速度没有ram那么快,通过更换SD卡发现读写速度和卡本身有直接的关系,所以应该尽量选择速度较快的卡。 |
微信公众号
手机版
RE:新手STM32学习笔记
RE:新手STM32学习笔记
RE:新手STM32学习笔记