欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6416|回復: 0
打印 上一主題 下一主題
收起左側

stm32f103c8t6最小系統驅動ads8681(ads8685,ads8689)測試程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:955625 發表于 2021-7-26 18:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
實驗器材:
        stm32f103c8t6最小系統,ads8681(ads8685,ads8689)
        
實驗目的:
        以硬件spi1驅動該ADC芯片工作讀取數據
        
硬件資源:
    1.ads8681外圍電路請查看官方文檔設計。
        2.引腳連接如下:
                       stm32f103c8t6      ads8681(AD)
           
                            PA5-----------------AD_SCK
    硬件spi1引腳      PA6----------------AD_SDO_0
                            PA7-----------------AD_SDI
                                       
                            PB10----------------AD_RVS
                            PB11----------------AD_RST
                            PB12----------------AD_CS  

其它說明:
        1.本實驗只測試了ads8681芯片.根據官方文檔或可驅動ads8685以及ads8689芯片,具體請自行測試;
        2.由于stm32f103c8t6的硬件spi時鐘最多為18Mhz,所以未能測試ads8681官方文檔所標注的1Msps采樣率;
        3.代碼中驅動該adc芯片采用的是:Standard SPI with CPOL = 0 and CPHASE = 0 模式,如有需要請自行更改配置;
        4.若使用更高速率單片機驅動,請自行研究移植,基本思路一致。
               
注意事項:
    注意驅動電壓:
        注意正負極連接短路!
        
STM32單片機源程序如下:
  1. #include "ADS8681.h"
  2. #include "spi.h"
  3. #include "delay.h"

  4. // 復位
  5. void ADS8681_RST(){
  6.         AD_RST = 0;
  7.         delay_ms(30);
  8.         AD_RST = 1;
  9.         delay_ms(30);
  10. }
  11. void ADS8681_Init(){
  12.         GPIO_InitTypeDef  GPIO_InitStructure;
  13.          
  14.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能PB端口時鐘
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;        //RST CS
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOB

  19.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RVS
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉輸入
  21.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  22.         SPI1_Init();
  23.         //AD_SCK=0;
  24.         ADS8681_RST();
  25.          ADS8681_Write_Register(0x14,0x000b);//配置電壓測量范圍,具體對應地址位14H的寄存器內容
  26. }
  27. //寫寄存器
  28. void ADS8681_Write_Register(u8 Addr,u16 data)  // 11010_00_<9-bit address>_<16-bit data>
  29. {
  30.         u16 retry = 0;
  31.         AD_CS = 1;
  32.         AD_CS = 0;
  33.         while(AD_RVS){//判斷RVS狀態,下同
  34.                 retry++;
  35.                 if(retry>=0XFFFE)        
  36.                         break;
  37.         }
  38.         SPI1_ReadWriteByte((0xD0<<8)|Addr);
  39.         SPI1_ReadWriteByte(data&0xffff);
  40.         AD_CS = 1;
  41. }
  42. // 讀寄存器
  43. u16 ADS8681_Read_Register(u8 Addr)        // 11001_xx_<9-bit address>_00000000_00000000
  44. {
  45.         u16 data1,data2;
  46.         u16 retry = 0;
  47.         AD_CS = 0;
  48.         while(AD_RVS){
  49.                 retry++;
  50.                 if(retry>=0Xff)        
  51.                         break;
  52.         }
  53.         SPI1_ReadWriteByte((0xC8<<8)|Addr);
  54.         SPI1_ReadWriteByte(0x0000);
  55.         AD_CS = 1;
  56.         retry = 0;
  57.         while(!AD_RVS){
  58.                 retry++;
  59.                 if(retry>=0Xff)        
  60.                         break;
  61.         }
  62.         AD_CS = 0;
  63.         retry = 0;
  64.         while(AD_RVS){
  65.                 retry++;
  66.                 if(retry>=0Xff)        
  67.                         break;
  68.         }
  69.         data1 = SPI1_ReadWriteByte(0x00);//低16位
  70.         data2 = SPI1_ReadWriteByte(0x00);//高16位
  71.         AD_CS = 1;
  72.         return (data2<<16)|data1;
  73. }
  74. // 讀取ads8681采樣值
  75. u32 ADS8681_Read_ConversionData()
  76. {
  77.         u16 data;
  78.         u16 retry = 0;
  79.         AD_CS = 1;        
  80.         while(!AD_RVS){
  81.                 retry++;
  82.                 if(retry>=0xfffe)        
  83.                         break;
  84.         }
  85.         AD_CS = 0;        
  86.         retry = 0;
  87.         while(AD_RVS){
  88.                 retry++;
  89.                 if(retry>=0xfffe)        
  90.                         break;
  91.         }        
  92.          data = SPI1_ReadWriteByte(0x00);//里邊的地址任意,該處主要是讀取數據
  93.          return data;
  94.                
  95. }
復制代碼
致謝:
    感謝相關人員提供的思路以及支持!

聲明:        
        只為提高技術,歡迎交流,不參與撕逼,如有雷同,純屬巧合。
全部代碼下載: C8T6_ADS8681硬件spi.7z (187.23 KB, 下載次數: 175)

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表