日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

stm32F103設(shè)計的長時間采集數(shù)據(jù)存儲

STM32F103芯片屬于中低端的32位ARM微控制器,ARM 32位的Cortex-M3的核,高達(dá)72MHz工作頻率,小容量型號的FLASH大小是16K和32K、中容量型號的FLASH大小是64K和128K、大容量型號的FLASH大小是256K、384K和512K。

該芯片用的比較多,主要是低功耗,性能出色,集成的外設(shè)也多,滿足大部分的電子產(chǎn)品應(yīng)用功能開發(fā)。本次主要是用STM32F103自帶的AD或者外擴高精度的ADC芯片采集數(shù)據(jù),并將數(shù)據(jù)實時保存在SD卡上。

全部回復(fù)(36)
正序查看
倒序查看
k6666
LV.9
2
2021-04-23 13:56

SD卡有兩種模式:SD模式(也稱為SDIO模式)和SPI模式,這兩種模式的引腳定義是不同的。

SD模式下,通??梢允褂盟母鶖?shù)據(jù)線進(jìn)行傳輸(4-bits Data),傳輸速度非常快。四位數(shù)據(jù)傳輸要使用引腳1、7、8和9(DAT0~DAT3);在某些不支持四線數(shù)據(jù)的場合,也可以使用單根線進(jìn)行數(shù)據(jù)傳輸(1-bit Data),此時使用引腳7(DAT0)。

SPI通信需要四根線:兩條數(shù)據(jù)線(SPI_MISO、SPI_MOSI),一條時鐘線(SPI_SCK)和一條片選(Chip Select)信號線。在SPI模式下,SD卡的8號、9號針腳沒有用到。

普通SD卡和微型SD卡(Micro SD card,TF card),打卡正反面:

小卡TF卡的正反面

0
回復(fù)
k6666
LV.9
3
2021-04-23 14:04
@k6666
SD卡有兩種模式:SD模式(也稱為SDIO模式)和SPI模式,這兩種模式的引腳定義是不同的。SD模式下,通??梢允褂盟母鶖?shù)據(jù)線進(jìn)行傳輸(4-bitsData),傳輸速度非???。四位數(shù)據(jù)傳輸要使用引腳1、7、8和9(DAT0~DAT3);在某些不支持四線數(shù)據(jù)的場合,也可以使用單根線進(jìn)行數(shù)據(jù)傳輸(1-bitData),此時使用引腳7(DAT0)。SPI通信需要四根線:兩條數(shù)據(jù)線(SPI_MISO、SPI_MOSI),一條時鐘線(SPI_SCK)和一條片選(ChipSelect)信號線。在SPI模式下,SD卡的8號、9號針腳沒有用到。普通SD卡和微型SD卡(MicroSDcard,TFcard),打卡正反面:[圖片][圖片]小卡TF卡的正反面[圖片][圖片]

SD卡三種模式的針腳定義

0
回復(fù)
k6666
LV.9
4
2021-04-23 14:10
@k6666
SD卡三種模式的針腳定義[圖片]

兩種SD卡類型的接線連接設(shè)計方式示意

0
回復(fù)
k6666
LV.9
5
2021-04-23 14:27
@k6666
兩種SD卡類型的接線連接設(shè)計方式示意[圖片][圖片]

主控電路圖和SD卡設(shè)計電路圖

0
回復(fù)
k6666
LV.9
6
2021-04-23 14:37
@k6666
主控電路圖和SD卡設(shè)計電路圖[圖片][圖片]

STM32F103單片機配置SD卡的相關(guān)函數(shù)

0
回復(fù)
k6666
LV.9
7
2021-04-25 12:23
@k6666
主控電路圖和SD卡設(shè)計電路圖[圖片][圖片]

.SDIO完全兼容多媒體卡系統(tǒng)規(guī)范版本4.2,卡支持三種不同數(shù)據(jù)總線模式:1位(默認(rèn))、4位和8位。

兼容先前版本的多媒體卡,兼容SDI/O卡規(guī)范版本2.0:卡支持兩種不同數(shù)據(jù)總線模式:1位(默認(rèn))和4位。

支持CE-ATA功能(完全符合CE-ATA數(shù)字協(xié)議版本1.1)。對于8位模式,數(shù)據(jù)傳輸高達(dá)48MHz。數(shù)據(jù)和命令輸出使能信號,控制外部雙向驅(qū)動程序。

0
回復(fù)
k6666
LV.9
8
2021-04-25 12:27
@k6666
STM32F103單片機配置SD卡的相關(guān)函數(shù)[圖片][圖片][圖片][圖片]

STM32F103采集的數(shù)據(jù)通道DMA向SD卡存儲數(shù)據(jù),外設(shè)要想通過DMA 來傳輸數(shù)據(jù),必須先給DMA 控制器發(fā)送DMA 請求,DMA收到請求信號之后,控制器會給外設(shè)一個應(yīng)答信號,當(dāng)外設(shè)應(yīng)答后且DMA  控制器收到應(yīng)答信號之后,就會啟動DMA 的傳輸,直到傳輸完畢。

0
回復(fù)
svs101
LV.8
9
2021-04-27 14:08

SD卡的存儲需要穩(wěn)定,且數(shù)據(jù)量大的時候速度要提升。

0
回復(fù)
svs101
LV.8
10
2021-04-27 14:09
@k6666
兩種SD卡類型的接線連接設(shè)計方式示意[圖片][圖片]

常用micro sd卡,小容量還大

0
回復(fù)
svs101
LV.8
11
2021-04-27 14:09
@k6666
STM32F103單片機配置SD卡的相關(guān)函數(shù)[圖片][圖片][圖片][圖片]

樓主這個程序設(shè)計數(shù)據(jù)存儲滿了怎么辦?

0
回復(fù)
k6666
LV.9
12
2021-04-28 14:04
@svs101
SD卡的存儲需要穩(wěn)定,且數(shù)據(jù)量大的時候速度要提升。

采用DMA方式傳輸數(shù)據(jù),速度快,效率高,不怎么占用CPU資源。

0
回復(fù)
k6666
LV.9
13
2021-04-28 14:05
@k6666
STM32F103采集的數(shù)據(jù)通道DMA向SD卡存儲數(shù)據(jù),外設(shè)要想通過DMA來傳輸數(shù)據(jù),必須先給DMA控制器發(fā)送DMA請求,DMA收到請求信號之后,控制器會給外設(shè)一個應(yīng)答信號,當(dāng)外設(shè)應(yīng)答后且DMA 控制器收到應(yīng)答信號之后,就會啟動DMA的傳輸,直到傳輸完畢。

采用DMA方式傳輸數(shù)據(jù),速度快,效率高,不怎么占用CPU資源。

0
回復(fù)
k6666
LV.9
14
2021-04-28 14:05
@k6666
STM32F103采集的數(shù)據(jù)通道DMA向SD卡存儲數(shù)據(jù),外設(shè)要想通過DMA來傳輸數(shù)據(jù),必須先給DMA控制器發(fā)送DMA請求,DMA收到請求信號之后,控制器會給外設(shè)一個應(yīng)答信號,當(dāng)外設(shè)應(yīng)答后且DMA 控制器收到應(yīng)答信號之后,就會啟動DMA的傳輸,直到傳輸完畢。

采用DMA方式傳輸數(shù)據(jù),速度快,效率高,不怎么占用CPU資源。

0
回復(fù)
k6666
LV.9
15
2021-04-28 14:06
@svs101
SD卡的存儲需要穩(wěn)定,且數(shù)據(jù)量大的時候速度要提升。

采用DMA方式傳輸數(shù)據(jù),速度快,效率高,不怎么占用CPU資源。

0
回復(fù)
k6666
LV.9
16
2021-04-28 14:06
@svs101
SD卡的存儲需要穩(wěn)定,且數(shù)據(jù)量大的時候速度要提升。

采用DMA方式傳輸數(shù)據(jù),速度快,效率高,不怎么占用CPU資源。

0
回復(fù)
k6666
LV.9
17
2021-04-28 14:08
@svs101
樓主這個程序設(shè)計數(shù)據(jù)存儲滿了怎么辦?

存儲容量不足的時候,程序會判別,進(jìn)行早期數(shù)據(jù)的擦除處理的、

SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr) { SD_Error errorstatus = SD_OK; uint32_t delay = 0; __IO uint32_t maxdelay = 0; uint8_t cardstate = 0; /*!< Check if the card coomnd class supports erase command */ if (((CSD_Tab[1] >> 20) & SD_CCCC_ERASE) == 0) { errorstatus = SD_REQUEST_NOT_APPLICABLE; return(errorstatus); } maxdelay = 120000 / ((SDIO->CLKCR & 0xFF) + 2); if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) //卡已上鎖 { errorstatus = SD_LOCK_UNLOCK_FAILED; return(errorstatus); } if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) { //在 sdhc 卡中,地址參數(shù)為塊地址,每塊 512 字節(jié),而 sdsc 卡地址為字節(jié)地址 //所以若是 sdhc 卡要對地址/512 進(jìn)行轉(zhuǎn)換 startaddr /= 512; endaddr /= 512; } /*!< According to sd-card spec 1.0 ERASE_GROUP_START (CMD32) and erase_group_end(CMD33) */ if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) { /*!< Send CMD32 SD_ERASE_GRP_START with argument as addr */ SDIO_CmdInitStructure.SDIO_Argument = startaddr; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_START; SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; //R1 SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; SDIO_SendCommand(&SDIO_CmdInitStructure); errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_START); if (errorstatus != SD_OK) { return(errorstatus); } /*!< Send CMD33 SD_ERASE_GRP_END with argument as addr */ SDIO_CmdInitStructure.SDIO_Argument = endaddr; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_END; SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; SDIO_SendCommand(&SDIO_CmdInitStructure); errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_END); if (errorstatus != SD_OK) { return(errorstatus); } } /*!< Send CMD38 ERASE */ SDIO_CmdInitStructure.SDIO_Argument = 0; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ERASE; SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; SDIO_SendCommand(&SDIO_CmdInitStructure); errorstatus = CmdResp1Error(SD_CMD_ERASE); if (errorstatus != SD_OK) { return(errorstatus); } for (delay = 0; delay < maxdelay; delay++) {} /*!< Wait till the card is in programming state */ errorstatus = IsCardProgramming(&cardstate); while ((errorstatus == SD_OK) && ((SD_CARD_PROGRAMMING == cardstate) || (SD_CARD_RECEIVING == cardstate))) { errorstatus = IsCardProgramming(&cardstate); } return(errorstatus); }

0
回復(fù)
k6666
LV.9
18
2021-04-28 14:09
@k6666
存儲容量不足的時候,程序會判別,進(jìn)行早期數(shù)據(jù)的擦除處理的、SD_ErrorSD_Erase(uint32_tstartaddr,uint32_tendaddr){SD_Errorerrorstatus=SD_OK;uint32_tdelay=0;__IOuint32_tmaxdelay=0;uint8_tcardstate=0;/*!<Checkifthecardcoomndclasssupportserasecommand*/if(((CSD_Tab[1]>>20)&SD_CCCC_ERASE)==0){errorstatus=SD_REQUEST_NOT_APPLICABLE;return(errorstatus);}maxdelay=120000/((SDIO->CLKCR&0xFF)+2);if(SDIO_GetResponse(SDIO_RESP1)&SD_CARD_LOCKED)//卡已上鎖{errorstatus=SD_LOCK_UNLOCK_FAILED;return(errorstatus);}if(CardType==SDIO_HIGH_CAPACITY_SD_CARD){//在sdhc卡中,地址參數(shù)為塊地址,每塊512字節(jié),而sdsc卡地址為字節(jié)地址//所以若是sdhc卡要對地址/512進(jìn)行轉(zhuǎn)換startaddr/=512;endaddr/=512;}/*!<Accordingtosd-cardspec1.0ERASE_GROUP_START(CMD32)anderase_group_end(CMD33)*/if((SDIO_STD_CAPACITY_SD_CARD_V1_1==CardType)||(SDIO_STD_CAPACITY_SD_CARD_V2_0==CardType)||(SDIO_HIGH_CAPACITY_SD_CARD==CardType)){/*!<SendCMD32SD_ERASE_GRP_STARTwithargumentasaddr*/SDIO_CmdInitStructure.SDIO_Argument=startaddr;SDIO_CmdInitStructure.SDIO_CmdIndex=SD_CMD_SD_ERASE_GRP_START;SDIO_CmdInitStructure.SDIO_Response=SDIO_Response_Short;//R1SDIO_CmdInitStructure.SDIO_Wait=SDIO_Wait_No;SDIO_CmdInitStructure.SDIO_CPSM=SDIO_CPSM_Enable;SDIO_SendCommand(&SDIO_CmdInitStructure);errorstatus=CmdResp1Error(SD_CMD_SD_ERASE_GRP_START);if(errorstatus!=SD_OK){return(errorstatus);}/*!<SendCMD33SD_ERASE_GRP_ENDwithargumentasaddr*/SDIO_CmdInitStructure.SDIO_Argument=endaddr;SDIO_CmdInitStructure.SDIO_CmdIndex=SD_CMD_SD_ERASE_GRP_END;SDIO_CmdInitStructure.SDIO_Response=SDIO_Response_Short;SDIO_CmdInitStructure.SDIO_Wait=SDIO_Wait_No;SDIO_CmdInitStructure.SDIO_CPSM=SDIO_CPSM_Enable;SDIO_SendCommand(&SDIO_CmdInitStructure);errorstatus=CmdResp1Error(SD_CMD_SD_ERASE_GRP_END);if(errorstatus!=SD_OK){return(errorstatus);}}/*!<SendCMD38ERASE*/SDIO_CmdInitStructure.SDIO_Argument=0;SDIO_CmdInitStructure.SDIO_CmdIndex=SD_CMD_ERASE;SDIO_CmdInitStructure.SDIO_Response=SDIO_Response_Short;SDIO_CmdInitStructure.SDIO_Wait=SDIO_Wait_No;SDIO_CmdInitStructure.SDIO_CPSM=SDIO_CPSM_Enable;SDIO_SendCommand(&SDIO_CmdInitStructure);errorstatus=CmdResp1Error(SD_CMD_ERASE);if(errorstatus!=SD_OK){return(errorstatus);}for(delay=0;delay<maxdelay;delay++){}/*!<Waittillthecardisinprogrammingstate*/errorstatus=IsCardProgramming(&cardstate);while((errorstatus==SD_OK)&&((SD_CARD_PROGRAMMING==cardstate)||(SD_CARD_RECEIVING==cardstate))){errorstatus=IsCardProgramming(&cardstate);}return(errorstatus);}

0
回復(fù)
k6666
LV.9
19
2021-04-28 14:10
@k6666
STM32F103單片機配置SD卡的相關(guān)函數(shù)[圖片][圖片][圖片][圖片]

部分電路

0
回復(fù)
k6666
LV.9
20
2021-04-30 16:50
@k6666
[圖片]

5.1快樂。后續(xù)在更新

0
回復(fù)
jsj01q
LV.2
21
2021-05-07 09:50

學(xué)習(xí)中,期待樓主更新

0
回復(fù)
2021-05-07 14:54

數(shù)據(jù)的存儲沒有采用文件系統(tǒng)嗎?FAT32之類的,這樣對數(shù)據(jù)管理要好點

0
回復(fù)
cwm4610
LV.6
23
2021-05-12 14:55

STM32F,是出了名的低功耗,請教下功耗分別是什么樣的?有幾種工作模式?低功耗是否支持電池供電,在此條件下,電壓跌落到多少后會主動進(jìn)入sleep模式?

AD自帶的分辨率是多少bit?是否有實例參考?

0
回復(fù)
lkings
LV.6
24
2021-05-13 13:18

此芯片不用外部晶振,節(jié)省空間,layout也變得容易了.確實是很優(yōu)秀的一款芯片

0
回復(fù)
k6666
LV.9
25
2021-05-18 15:44
@zhangjiantao
數(shù)據(jù)的存儲沒有采用文件系統(tǒng)嗎?FAT32之類的,這樣對數(shù)據(jù)管理要好點

采用的就是FAT32

0
回復(fù)
k6666
LV.9
26
2021-05-18 15:46
@cwm4610
STM32F,是出了名的低功耗,請教下功耗分別是什么樣的?有幾種工作模式?低功耗是否支持電池供電,在此條件下,電壓跌落到多少后會主動進(jìn)入sleep模式?AD自帶的分辨率是多少bit?是否有實例參考?

STM32 F不同型號是有差異的,自帶的AD分辨率是12bit

0
回復(fù)
k6666
LV.9
27
2021-05-18 15:46
@lkings
此芯片不用外部晶振,節(jié)省空間,layout也變得容易了.確實是很優(yōu)秀的一款芯片

內(nèi)部RTC精度不高,穩(wěn)定性也差??梢酝饨觽€32768HZ

0
回復(fù)
飛翔2004
LV.10
28
2021-05-21 12:40
@k6666
內(nèi)部RTC精度不高,穩(wěn)定性也差??梢酝饨觽€32768HZ

定時等需要時間準(zhǔn)確的才需要外接個32768HZ的,跑程序系統(tǒng)時鐘源沒必要,如果用32768HZ的頻率跑系統(tǒng)太慢了。

0
回復(fù)
飛翔2004
LV.10
29
2021-05-21 12:50
@k6666
STM32F103采集的數(shù)據(jù)通道DMA向SD卡存儲數(shù)據(jù),外設(shè)要想通過DMA來傳輸數(shù)據(jù),必須先給DMA控制器發(fā)送DMA請求,DMA收到請求信號之后,控制器會給外設(shè)一個應(yīng)答信號,當(dāng)外設(shè)應(yīng)答后且DMA 控制器收到應(yīng)答信號之后,就會啟動DMA的傳輸,直到傳輸完畢。

快速讀寫數(shù)據(jù)量大的文件等用DMA方式具有很大的優(yōu)勢,這種方式的話不同速度的硬件可以溝通,而不需要單片機大量中斷。

0
回復(fù)
lkings
LV.6
30
2021-05-28 08:23

數(shù)據(jù)是以文件方式存儲還是,還是隨存隨取的字節(jié)方式

0
回復(fù)
2021-05-28 13:34
@飛翔2004
快速讀寫數(shù)據(jù)量大的文件等用DMA方式具有很大的優(yōu)勢,這種方式的話不同速度的硬件可以溝通,而不需要單片機大量中斷。

讀寫卡比較占用時間的,尤其存儲數(shù)據(jù)量大的時候,操作時間比較長

0
回復(fù)
發(fā)