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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ADS8681 STM32的SPI驅(qū)動代碼 vscode僅供參考

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1020393 發(fā)表于 2022-4-21 16:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include "ads8681.h"
  2. #include "stm32f1xx_hal_def.h"
  3. /**
  4. * @brief    SPI發(fā)送指定長度的數(shù)據(jù)
  5. * @param    buf  —— 發(fā)送數(shù)據(jù)緩沖區(qū)首地址
  6. * @param    size —— 要發(fā)送數(shù)據(jù)的字節(jié)數(shù)
  7. * @retval   成功返回HAL_OK
  8. */
  9. // static HAL_StatusTypeDef SPI_Transmit(uint8_t* send_buf, uint16_t size)
  10. // {
  11. //     return HAL_SPI_Transmit(&hspi1, send_buf, size, 100);
  12. // }

  13. /**
  14. * @brief   SPI接收指定長度的數(shù)據(jù)
  15. * @param   buf  —— 接收數(shù)據(jù)緩沖區(qū)首地址
  16. * @param   size —— 要接收數(shù)據(jù)的字節(jié)數(shù)
  17. * @retval  成功返回HAL_OK
  18. */
  19. // static HAL_StatusTypeDef SPI_Receive(uint8_t* recv_buf, uint16_t size)
  20. // {
  21. //    return HAL_SPI_Receive(&hspi1, recv_buf, size, 100);
  22. // }

  23. /**
  24. * @brief   SPI在發(fā)送數(shù)據(jù)的同時接收指定長度的數(shù)據(jù)
  25. * @param   send_buf  —— 接收數(shù)據(jù)緩沖區(qū)首地址
  26. * @param   recv_buf  —— 接收數(shù)據(jù)緩沖區(qū)首地址
  27. * @param   size —— 要發(fā)送/接收數(shù)據(jù)的字節(jié)數(shù)
  28. * @retval  成功返回HAL_OK
  29. */
  30. static HAL_StatusTypeDef SPI_TransmitReceive(uint8_t* send_buf, uint8_t* recv_buf, uint16_t size)
  31. {
  32.    return HAL_SPI_TransmitReceive(&hspi1, send_buf, recv_buf, size, 100);
  33. }

  34. /**
  35. * @brief  ADS8681_Read_Write_Byte ———— ADS8681讀寫一個字節(jié)
  36. * @param    dat  —— 發(fā)送數(shù)據(jù)緩沖區(qū)
  37. * @param   read_byte  —— 接收數(shù)據(jù)緩沖區(qū)首地址
  38. * @retval  read_byte
  39. */
  40. uint8_t ADS8681_Read_Write_Byte(uint8_t dat)
  41. {
  42.   uint8_t read_byte;
  43.   ADC_CS_L;
  44.   SPI_TransmitReceive(&dat, &read_byte,1);
  45.   ADC_CS_H;
  46.   return read_byte ;
  47. }

  48. /**
  49. * @brief    ADS8681_Read_Write_16Byte ——— ADS8681讀寫16位數(shù)據(jù)
  50. * @param    dat         ——  發(fā)送數(shù)據(jù)
  51. * @param    write_buff  ——    接收數(shù)據(jù)緩沖區(qū)首地址
  52. * @param    read_buff    ——    接收數(shù)據(jù)緩沖區(qū)首地址
  53. * @retval  read_byte
  54. */
  55. uint16_t ADS8681_Read_Write_16Byte(uint16_t dat)
  56. {
  57.   uint16_t read_byte;
  58.   uint8_t write_buff[2];
  59.   uint8_t read_buff[2];
  60.   write_buff[0] = (dat>>8)&0xff;
  61.   write_buff[1] =  dat&0xff;
  62.   ADC_CS_L;
  63.   SPI_TransmitReceive(write_buff, read_buff,2);
  64.   ADC_CS_H;
  65.   read_byte = read_buff[0];
  66.   read_byte = ((read_byte<<8)&0xff00)|read_buff[1];

  67.   return read_byte;
  68. }

  69. /**
  70. * @brief    aADS8681_reg_config ———      ADS8681操作寄存器,寫數(shù)據(jù),讀數(shù)據(jù)
  71. * @param    com       ——  命令字(前7位為 List of Input Commands)
  72. * @param    addrs     ——  寄存器的地址(8-16位為Configuration Registers)
  73. * @param    dat       ——  寄存器的15-0位(17-32位為Configuration Registers數(shù)據(jù)位)
  74. * @retval  result
  75. */
  76. uint32_t ADS8681_reg_config(uint8_t com,uint16_t address,uint16_t dat)
  77. {
  78.   uint32_t result = 0;
  79.   uint16_t temp = 0;
  80.   ADC_CS_L;
  81.   temp =(((com << 1) | ((address >> 8) & 1)) << 8) | (address & 0x00FF); //com和 address
  82.   result = ADS8681_Read_Write_16Byte(temp);
  83.   result = (result<<16)|ADS8681_Read_Write_16Byte(dat);
  84.   ADC_CS_H;

  85.   return result;

  86. }

  87. /**
  88. * @brief    ADS8681_Read ———      ADS8681讀數(shù)據(jù),一次讀32位
  89. * @retval  read_buff
  90. */
  91. uint32_t ADS8681_Read(void)
  92. {
  93.   unsigned long read_buff = 0;
  94.   ADC_CS_L;
  95.    
  96.     read_buff = ((read_buff<<16)&0xffff0000)|ADS8681_Read_Write_16Byte(DUMMY);

  97.   ADC_CS_H;
  98.   
  99.   return read_buff;
  100. }

  101. void ads8681_Init(void)
  102. {
  103.   ADS_RST_L;
  104.   ADS_RVS_L;
  105.   HAL_Delay(100);
  106.   ADS_RST_H;  
  107.   ADS8681_reg_config(0,0,0x00);  //
  108. }

  109. void ADS8681_Display(void)
  110. {
  111.   unsigned long temp1=0,temp=0;
  112.   //采樣5000次,去ADC抖動
  113.   for (uint16_t i = 0; i <5000; i++)
  114.   {
  115.     temp1 = (unsigned long)ADS8681_Read();
  116.     temp = temp+temp1;
  117.   }
  118.   //ADC采樣轉(zhuǎn)換結(jié)果
  119.   temp = temp/5000;  
  120.   temp = (temp-32767)*24576;  // 轉(zhuǎn)換結(jié)公式 V=(采樣結(jié)果-32767)*最大量程/65535  
  121.   temp = temp/65535*10;
  122.   OLED_ShowNum(41,2,temp,5,16);
  123. }
復(fù)制代碼


代碼可能有不足和錯誤之處,僅供參考,vscode寫的: ADS8681.7z (5.22 MB, 下載次數(shù): 32)

評分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:206350 發(fā)表于 2022-12-5 21:20 | 只看該作者
支持~~~~
回復(fù)

使用道具 舉報

板凳
ID:1049697 發(fā)表于 2022-12-11 00:01 | 只看該作者
vscode不是寫web代碼的么。。嘿嘿
回復(fù)

使用道具 舉報

地板
ID:1133319 發(fā)表于 2024-10-10 14:03 | 只看該作者
你好,有個問題就是每次轉(zhuǎn)換不得需要一定的時間來等待采集完成嗎,我看你那個采集一次后就cs為1了,然后下次cs為0,進(jìn)行第二次采集,這個cs1到0 采集時間夠嗎
回復(fù)

使用道具 舉報

5#
ID:1133319 發(fā)表于 2024-10-10 14:03 | 只看該作者
你好,有個問題就是每次轉(zhuǎn)換不得需要一定的時間來等待采集完成嗎,我看你那個采集一次后就cs為1了,然后下次cs為0,進(jìn)行第二次采集,這個cs1到0 采集時間夠嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级片在线视频 | 一区二区三区av | 精品成人一区二区 | 亚洲精品国产区 | 国产美女福利在线观看 | 国产成人a亚洲精品 | www久久国产 | 亚洲一区二区成人 | 国产精品 亚洲一区 | 国产精品网址 | 国产69精品久久久久777 | av一区二区三区四区 | 天天干天天爱天天操 | 美国一级毛片a | 一区二区三区不卡视频 | www.久久久.com | jlzzjlzz欧美大全 | 亚洲一区导航 | 伊人色综合久久天天五月婷 | 欧美日韩在线观看一区 | 男人的天堂中文字幕 | 91成人在线 | 成人影院网站ww555久久精品 | 在线亚洲精品 | 天天草夜夜骑 | 一区免费| 日韩在线精品视频 | 波多野吉衣在线播放 | 婷婷在线视频 | 久久国产亚洲 | 欧美久久久久久久久 | 国产精品久久久一区二区三区 | 国产精品爱久久久久久久 | 在线国产视频 | 成人九色 | 成人av高清在线观看 | 国产精品国产三级国产aⅴ无密码 | 一区二区精品 | 国产精品毛片一区二区在线看 | 久久精品一区 | 国产日韩欧美一区二区 |