|
基于STN32F407的AD7606芯片ADC采樣例程,使用FSMC接口
單片機(jī)源程序如下:
- #include "bsp.h" /* 如果要用ST的固件庫(kù),必須包含這個(gè)文件 */
- /* 定義例程名和例程發(fā)布日期 */
- #define EXAMPLE_NAME "F4-029_AD7606模塊例程"
- #define EXAMPLE_DATE "02-01"
- #define DEMO_VER "1.0"
- /* 僅允許本文件內(nèi)調(diào)用的函數(shù)聲明 */
- static void PrintfLogo(void);
- /*
- *********************************************************************************************************
- * 函 數(shù) 名: main
- * 功能說(shuō)明: c程序入口
- * 形 參:無(wú)
- * 返 回 值: 錯(cuò)誤代碼(無(wú)需處理)
- *********************************************************************************************************
- */
- int main(void)
- {
- uint8_t ucKeyCode;
- uint8_t ucRefresh = 0;
- uint8_t ucFifoMode;
-
- /*
- 由于ST固件庫(kù)的啟動(dòng)文件已經(jīng)執(zhí)行了CPU系統(tǒng)時(shí)鐘的初始化,所以不必再次重復(fù)配置系統(tǒng)時(shí)鐘。
- 啟動(dòng)文件配置了CPU主時(shí)鐘頻率、內(nèi)部Flash訪(fǎng)問(wèn)速度和可選的外部SRAM FSMC初始化。
- 系統(tǒng)時(shí)鐘缺省配置為72MHz,如果需要更改,可以修改:
- \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
- 中配置系統(tǒng)時(shí)鐘的宏。
- */
- bsp_Init();
- PrintfLogo(); /* 打印例程Logo到串口1 */
- ucFifoMode = 0; /* AD7606進(jìn)入普通工作模式 */
-
- bsp_InitAD7606(); /* 配置AD7606所用的GPIO */
- AD7606_SetOS(AD_OS_NO); /* 無(wú)過(guò)采樣 */
- AD7606_SetInputRange(0); /* 0表示輸入量程為正負(fù)5V, 1表示正負(fù)10V */
- bsp_StartAutoTimer(0, 500); /* 啟動(dòng)1個(gè)200ms的自動(dòng)重裝的定時(shí)器 */
- AD7606_StartConvst(); /* 啟動(dòng)1次轉(zhuǎn)換 */
- ucRefresh = 0;
- while (1)
- {
- CPU_IDLE(); /* 這個(gè)宏在bsp_timer.h 中定義,目前定義為空。用戶(hù)可以修改這個(gè)宏實(shí)現(xiàn)CPU休眠和喂狗 */
- if (ucRefresh == 1)
- {
- ucRefresh = 0;
-
- /* 打印ADC采樣結(jié)果 */
- printf("Range = %d, OS = %d, ", g_tAD7606.ucRange, g_tAD7606.ucOS);
- printf("CH1 = %6d, CH2 = %6d, CH3 = %6d, CH4 = %6d, ",
- g_tAD7606.sNowAdc[0], g_tAD7606.sNowAdc[1], g_tAD7606.sNowAdc[2], g_tAD7606.sNowAdc[3]);
- printf("CH5 = %6d, CH6 = %6d, CH7 = %6d, CH8 = %6d\r",
- g_tAD7606.sNowAdc[4], g_tAD7606.sNowAdc[5], g_tAD7606.sNowAdc[6], g_tAD7606.sNowAdc[7]);
- }
-
- if (ucFifoMode == 0) /* AD7606 普通工作模式 */
- {
- if (bsp_CheckTimer(0))
- {
- /* 每隔500ms 進(jìn)來(lái)一次. 由軟件啟動(dòng)轉(zhuǎn)換 */
- AD7606_ReadNowAdc(); /* 讀取采樣結(jié)果 */
- AD7606_StartConvst(); /* 啟動(dòng)下次轉(zhuǎn)換 */
-
- ucRefresh = 1; /* 刷新顯示 */
- }
- }
- else
- {
- /*
- 在FIFO工作模式,bsp_AD7606自動(dòng)進(jìn)行采集,數(shù)據(jù)存儲(chǔ)在FIFO緩沖區(qū)。
- 結(jié)果可以通過(guò)下面的函數(shù)讀取:
- uint8_t AD7606_ReadFifo(uint16_t *_usReadAdc)
-
- 你可以將數(shù)據(jù)保存到SD卡,或者保存到外部SRAM。
- 本例未對(duì)FIFO中的數(shù)據(jù)進(jìn)行處理,進(jìn)行打印當(dāng)前最新的樣本值。
-
- 如果主程序不能及時(shí)讀取FIFO數(shù)據(jù),那么 AD7606_FifoFull() 將返回真。
-
- 8通道200K采樣時(shí),數(shù)據(jù)傳輸率 = 200 000 * 2 * 8 = 3.2MB/S
- */
-
- if (bsp_CheckTimer(0))
- {
- ucRefresh = 1; /* 刷新顯示 */
- }
- }
- /* 按鍵檢測(cè)由后臺(tái)systick中斷服務(wù)程序?qū)崿F(xiàn),我們只需要調(diào)用bsp_GetKey讀取鍵值即可。這個(gè)函數(shù)不會(huì)
- 等待按鍵按下,這樣我們可以在while循環(huán)內(nèi)做其他的事情 */
- ucKeyCode = bsp_GetKey(); /* 讀取鍵值, 無(wú)鍵按下時(shí)返回 KEY_NONE = 0 */
- if (ucKeyCode != KEY_NONE)
- {
- /*
- 對(duì)于按鍵彈起事件,缺省的bsp_button.c 僅檢測(cè)了TAMPER、WAKEUP、USER鍵、搖桿OK鍵的彈起事件
- 如果您的應(yīng)用程序需要其它鍵(比如方向鍵)的彈起事件,您需要簡(jiǎn)單修改一下bsp_button.c文件
- */
- switch (ucKeyCode)
- {
- case KEY_DOWN_K1: /* K1鍵按下 切換量程 */
- if (g_tAD7606.ucRange == 0)
- {
- AD7606_SetInputRange(1);
- }
- else
- {
- AD7606_SetInputRange(0);
- }
- ucRefresh = 1;
- break;
- case KEY_DOWN_K2: /* K2鍵按下 */
- ucFifoMode = 1; /* AD7606進(jìn)入FIFO工作模式 */
- printf("\r\nAD7606進(jìn)入FIFO工作模式 (200KHz 8通道同步采集)...\r\n");
- AD7606_StartRecord(200000); /* 啟動(dòng)200kHz采樣速率 */
- break;
- case KEY_DOWN_K3: /* K3鍵按下 */
- AD7606_StopRecord(); /* 停止記錄 */
- ucFifoMode = 0; /* AD7606進(jìn)入普通工作模式 */
- printf("\r\nAD7606進(jìn)入普通工作模式(0.5秒定時(shí)采集)...\r\n");
- break;
- case JOY_DOWN_U: /* 搖桿UP鍵按下 */
- if (g_tAD7606.ucOS < 6)
- {
- g_tAD7606.ucOS++;
- }
- ucRefresh = 1;
- break;
- case JOY_DOWN_D: /* 搖桿DOWN鍵按下 */
- if (g_tAD7606.ucOS > 0)
- {
- g_tAD7606.ucOS--;
- }
- ucRefresh = 1;
- break;
- case JOY_DOWN_L: /* 搖桿LEFT鍵按下 */
- break;
- case JOY_DOWN_R: /* 搖桿RIGHT鍵按下 */
- break;
- case JOY_DOWN_OK: /* 搖桿OK鍵按下 */
- break;
- default:
- /* 其他的鍵值不處理 */
- break;
- }
- }
- }
- }
- /*
- *********************************************************************************************************
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
AD7606_FSMC FSMC例程(STM32F407).7z
(1.91 MB, 下載次數(shù): 62)
2020-7-10 15:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|