久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2869|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32+AD7606芯片源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:801023 發(fā)表于 2020-7-10 14:35 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于STN32F407的AD7606芯片ADC采樣例程,使用FSMC接口

單片機(jī)源程序如下:
  1. #include "bsp.h"                /* 如果要用ST的固件庫(kù),必須包含這個(gè)文件 */

  2. /* 定義例程名和例程發(fā)布日期 */
  3. #define EXAMPLE_NAME        "F4-029_AD7606模塊例程"
  4. #define EXAMPLE_DATE        "02-01"
  5. #define DEMO_VER                "1.0"

  6. /* 僅允許本文件內(nèi)調(diào)用的函數(shù)聲明 */
  7. static void PrintfLogo(void);

  8. /*
  9. *********************************************************************************************************
  10. *        函 數(shù) 名: main
  11. *        功能說(shuō)明: c程序入口
  12. *        形    參:無(wú)
  13. *        返 回 值: 錯(cuò)誤代碼(無(wú)需處理)
  14. *********************************************************************************************************
  15. */
  16. int main(void)
  17. {
  18.         uint8_t ucKeyCode;
  19.         uint8_t ucRefresh = 0;
  20.         uint8_t ucFifoMode;
  21.        
  22.         /*
  23.                 由于ST固件庫(kù)的啟動(dòng)文件已經(jīng)執(zhí)行了CPU系統(tǒng)時(shí)鐘的初始化,所以不必再次重復(fù)配置系統(tǒng)時(shí)鐘。
  24.                 啟動(dòng)文件配置了CPU主時(shí)鐘頻率、內(nèi)部Flash訪(fǎng)問(wèn)速度和可選的外部SRAM FSMC初始化。

  25.                 系統(tǒng)時(shí)鐘缺省配置為72MHz,如果需要更改,可以修改:
  26.                 \Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
  27.                 中配置系統(tǒng)時(shí)鐘的宏。
  28.         */

  29.         bsp_Init();
  30.         PrintfLogo();                /* 打印例程Logo到串口1 */

  31.         ucFifoMode = 0;                 /* AD7606進(jìn)入普通工作模式 */
  32.        
  33.         bsp_InitAD7606();        /* 配置AD7606所用的GPIO */

  34.         AD7606_SetOS(AD_OS_NO);                /* 無(wú)過(guò)采樣 */
  35.         AD7606_SetInputRange(0);        /* 0表示輸入量程為正負(fù)5V, 1表示正負(fù)10V */

  36.         bsp_StartAutoTimer(0, 500);        /* 啟動(dòng)1個(gè)200ms的自動(dòng)重裝的定時(shí)器 */
  37.         AD7606_StartConvst();                /* 啟動(dòng)1次轉(zhuǎn)換 */
  38.         ucRefresh = 0;
  39.         while (1)
  40.         {
  41.                 CPU_IDLE();                /* 這個(gè)宏在bsp_timer.h 中定義,目前定義為空。用戶(hù)可以修改這個(gè)宏實(shí)現(xiàn)CPU休眠和喂狗 */

  42.                 if (ucRefresh == 1)
  43.                 {
  44.                         ucRefresh = 0;
  45.                        
  46.                         /* 打印ADC采樣結(jié)果 */
  47.                         printf("Range = %d, OS = %d, ", g_tAD7606.ucRange, g_tAD7606.ucOS);
  48.                         printf("CH1 = %6d, CH2 = %6d, CH3 = %6d, CH4 = %6d, ",
  49.                                 g_tAD7606.sNowAdc[0], g_tAD7606.sNowAdc[1], g_tAD7606.sNowAdc[2], g_tAD7606.sNowAdc[3]);
  50.                         printf("CH5 = %6d, CH6 = %6d, CH7 = %6d, CH8 = %6d\r",
  51.                                 g_tAD7606.sNowAdc[4], g_tAD7606.sNowAdc[5], g_tAD7606.sNowAdc[6], g_tAD7606.sNowAdc[7]);
  52.                 }               
  53.                
  54.                 if (ucFifoMode == 0)        /* AD7606 普通工作模式 */
  55.                 {
  56.                         if (bsp_CheckTimer(0))       
  57.                         {               
  58.                                 /* 每隔500ms 進(jìn)來(lái)一次. 由軟件啟動(dòng)轉(zhuǎn)換 */
  59.                                 AD7606_ReadNowAdc();                /* 讀取采樣結(jié)果 */
  60.                                 AD7606_StartConvst();                /* 啟動(dòng)下次轉(zhuǎn)換 */
  61.                                
  62.                                 ucRefresh = 1;        /* 刷新顯示 */
  63.                         }
  64.                 }
  65.                 else
  66.                 {
  67.                         /*
  68.                                 在FIFO工作模式,bsp_AD7606自動(dòng)進(jìn)行采集,數(shù)據(jù)存儲(chǔ)在FIFO緩沖區(qū)。
  69.                                 結(jié)果可以通過(guò)下面的函數(shù)讀取:                       
  70.                                 uint8_t AD7606_ReadFifo(uint16_t *_usReadAdc)
  71.                        
  72.                                 你可以將數(shù)據(jù)保存到SD卡,或者保存到外部SRAM。

  73.                                 本例未對(duì)FIFO中的數(shù)據(jù)進(jìn)行處理,進(jìn)行打印當(dāng)前最新的樣本值。
  74.                        
  75.                                 如果主程序不能及時(shí)讀取FIFO數(shù)據(jù),那么 AD7606_FifoFull() 將返回真。
  76.                        
  77.                                 8通道200K采樣時(shí),數(shù)據(jù)傳輸率 = 200 000 * 2 * 8 = 3.2MB/S                       
  78.                         */
  79.                        
  80.                         if (bsp_CheckTimer(0))       
  81.                         {
  82.                                 ucRefresh = 1;        /* 刷新顯示 */
  83.                         }
  84.                 }               

  85.                 /* 按鍵檢測(cè)由后臺(tái)systick中斷服務(wù)程序?qū)崿F(xiàn),我們只需要調(diào)用bsp_GetKey讀取鍵值即可。這個(gè)函數(shù)不會(huì)
  86.                 等待按鍵按下,這樣我們可以在while循環(huán)內(nèi)做其他的事情 */
  87.                 ucKeyCode = bsp_GetKey();        /* 讀取鍵值, 無(wú)鍵按下時(shí)返回 KEY_NONE = 0 */
  88.                 if (ucKeyCode != KEY_NONE)
  89.                 {
  90.                         /*
  91.                                 對(duì)于按鍵彈起事件,缺省的bsp_button.c 僅檢測(cè)了TAMPER、WAKEUP、USER鍵、搖桿OK鍵的彈起事件
  92.                                 如果您的應(yīng)用程序需要其它鍵(比如方向鍵)的彈起事件,您需要簡(jiǎn)單修改一下bsp_button.c文件
  93.                         */
  94.                         switch (ucKeyCode)
  95.                         {
  96.                                 case KEY_DOWN_K1:                        /* K1鍵按下 切換量程 */
  97.                                         if (g_tAD7606.ucRange == 0)
  98.                                         {
  99.                                                 AD7606_SetInputRange(1);
  100.                                         }
  101.                                         else
  102.                                         {
  103.                                                 AD7606_SetInputRange(0);
  104.                                         }
  105.                                         ucRefresh = 1;
  106.                                         break;

  107.                                 case KEY_DOWN_K2:                        /* K2鍵按下 */
  108.                                         ucFifoMode = 1;                                         /* AD7606進(jìn)入FIFO工作模式 */
  109.                                         printf("\r\nAD7606進(jìn)入FIFO工作模式 (200KHz 8通道同步采集)...\r\n");
  110.                                         AD7606_StartRecord(200000);                /* 啟動(dòng)200kHz采樣速率 */
  111.                                         break;

  112.                                 case KEY_DOWN_K3:                        /* K3鍵按下 */
  113.                                         AD7606_StopRecord();        /* 停止記錄 */                               
  114.                                         ucFifoMode = 0;                         /* AD7606進(jìn)入普通工作模式 */                               
  115.                                         printf("\r\nAD7606進(jìn)入普通工作模式(0.5秒定時(shí)采集)...\r\n");
  116.                                         break;

  117.                                 case JOY_DOWN_U:                        /* 搖桿UP鍵按下 */
  118.                                         if (g_tAD7606.ucOS < 6)
  119.                                         {
  120.                                                 g_tAD7606.ucOS++;
  121.                                         }
  122.                                         ucRefresh = 1;
  123.                                         break;

  124.                                 case JOY_DOWN_D:                        /* 搖桿DOWN鍵按下 */
  125.                                         if (g_tAD7606.ucOS > 0)
  126.                                         {
  127.                                                 g_tAD7606.ucOS--;
  128.                                         }
  129.                                         ucRefresh = 1;
  130.                                         break;

  131.                                 case JOY_DOWN_L:                        /* 搖桿LEFT鍵按下 */
  132.                                         break;

  133.                                 case JOY_DOWN_R:                        /* 搖桿RIGHT鍵按下 */
  134.                                         break;

  135.                                 case JOY_DOWN_OK:                        /* 搖桿OK鍵按下 */
  136.                                         break;

  137.                                 default:
  138.                                         /* 其他的鍵值不處理 */
  139.                                         break;
  140.                         }
  141.                 }
  142.         }
  143. }


  144. /*
  145. *********************************************************************************************************
  146. ……………………

  147. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
AD7606_FSMC FSMC例程(STM32F407).7z (1.91 MB, 下載次數(shù): 62)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av电影一区二区 | 午夜精品在线 | 日韩一区二区免费视频 | 香蕉av免费 | 欧美精品久久久久久久久久 | 日韩一区二| 国产精品网址 | 亚洲综合色网站 | 国产精品入口麻豆www | 国产在线a视频 | 成人欧美一区二区三区色青冈 | 国产视频二区在线观看 | 人人鲁人人莫人人爱精品 | 久久99国产精品久久99果冻传媒 | 国产激情网站 | 欧美一级α片 | 精品久久久久久亚洲综合网 | 日韩欧美中文字幕在线观看 | 国产一区二区三区精品久久久 | 亚洲国产欧美一区 | 国产在线中文 | av看看| 亚洲精品99 | 伊人久久大香线 | 亚洲精品欧洲 | 久久久一二三 | 久久久久久中文字幕 | 国产精品免费在线 | 一级毛片播放 | 国产一区二区在线播放 | 91福利在线观看 | 成人免费精品视频 | 欧美成人二区 | 精品中文在线 | 农村黄性色生活片 | 成人在线免费网站 | 亚洲精品电影 | 国产 欧美 日韩 一区 | 国产1区2区 | 亚洲欧美bt| 亚洲欧美一区二区三区在线 |