標(biāo)題:
ADS8681 STM32的SPI驅(qū)動(dòng)代碼 vscode僅供參考
[打印本頁(yè)]
作者:
行行QU
時(shí)間:
2022-4-21 16:20
標(biāo)題:
ADS8681 STM32的SPI驅(qū)動(dòng)代碼 vscode僅供參考
單片機(jī)源程序如下:
#include "ads8681.h"
#include "stm32f1xx_hal_def.h"
/**
* @brief SPI發(fā)送指定長(zhǎng)度的數(shù)據(jù)
* @param buf —— 發(fā)送數(shù)據(jù)緩沖區(qū)首地址
* @param size —— 要發(fā)送數(shù)據(jù)的字節(jié)數(shù)
* @retval 成功返回HAL_OK
*/
// static HAL_StatusTypeDef SPI_Transmit(uint8_t* send_buf, uint16_t size)
// {
// return HAL_SPI_Transmit(&hspi1, send_buf, size, 100);
// }
/**
* @brief SPI接收指定長(zhǎng)度的數(shù)據(jù)
* @param buf —— 接收數(shù)據(jù)緩沖區(qū)首地址
* @param size —— 要接收數(shù)據(jù)的字節(jié)數(shù)
* @retval 成功返回HAL_OK
*/
// static HAL_StatusTypeDef SPI_Receive(uint8_t* recv_buf, uint16_t size)
// {
// return HAL_SPI_Receive(&hspi1, recv_buf, size, 100);
// }
/**
* @brief SPI在發(fā)送數(shù)據(jù)的同時(shí)接收指定長(zhǎng)度的數(shù)據(jù)
* @param send_buf —— 接收數(shù)據(jù)緩沖區(qū)首地址
* @param recv_buf —— 接收數(shù)據(jù)緩沖區(qū)首地址
* @param size —— 要發(fā)送/接收數(shù)據(jù)的字節(jié)數(shù)
* @retval 成功返回HAL_OK
*/
static HAL_StatusTypeDef SPI_TransmitReceive(uint8_t* send_buf, uint8_t* recv_buf, uint16_t size)
{
return HAL_SPI_TransmitReceive(&hspi1, send_buf, recv_buf, size, 100);
}
/**
* @brief ADS8681_Read_Write_Byte ———— ADS8681讀寫一個(gè)字節(jié)
* @param dat —— 發(fā)送數(shù)據(jù)緩沖區(qū)
* @param read_byte —— 接收數(shù)據(jù)緩沖區(qū)首地址
* @retval read_byte
*/
uint8_t ADS8681_Read_Write_Byte(uint8_t dat)
{
uint8_t read_byte;
ADC_CS_L;
SPI_TransmitReceive(&dat, &read_byte,1);
ADC_CS_H;
return read_byte ;
}
/**
* @brief ADS8681_Read_Write_16Byte ——— ADS8681讀寫16位數(shù)據(jù)
* @param dat —— 發(fā)送數(shù)據(jù)
* @param write_buff —— 接收數(shù)據(jù)緩沖區(qū)首地址
* @param read_buff —— 接收數(shù)據(jù)緩沖區(qū)首地址
* @retval read_byte
*/
uint16_t ADS8681_Read_Write_16Byte(uint16_t dat)
{
uint16_t read_byte;
uint8_t write_buff[2];
uint8_t read_buff[2];
write_buff[0] = (dat>>8)&0xff;
write_buff[1] = dat&0xff;
ADC_CS_L;
SPI_TransmitReceive(write_buff, read_buff,2);
ADC_CS_H;
read_byte = read_buff[0];
read_byte = ((read_byte<<8)&0xff00)|read_buff[1];
return read_byte;
}
/**
* @brief aADS8681_reg_config ——— ADS8681操作寄存器,寫數(shù)據(jù),讀數(shù)據(jù)
* @param com —— 命令字(前7位為 List of Input Commands)
* @param addrs —— 寄存器的地址(8-16位為Configuration Registers)
* @param dat —— 寄存器的15-0位(17-32位為Configuration Registers數(shù)據(jù)位)
* @retval result
*/
uint32_t ADS8681_reg_config(uint8_t com,uint16_t address,uint16_t dat)
{
uint32_t result = 0;
uint16_t temp = 0;
ADC_CS_L;
temp =(((com << 1) | ((address >> 8) & 1)) << 8) | (address & 0x00FF); //com和 address
result = ADS8681_Read_Write_16Byte(temp);
result = (result<<16)|ADS8681_Read_Write_16Byte(dat);
ADC_CS_H;
return result;
}
/**
* @brief ADS8681_Read ——— ADS8681讀數(shù)據(jù),一次讀32位
* @retval read_buff
*/
uint32_t ADS8681_Read(void)
{
unsigned long read_buff = 0;
ADC_CS_L;
read_buff = ((read_buff<<16)&0xffff0000)|ADS8681_Read_Write_16Byte(DUMMY);
ADC_CS_H;
return read_buff;
}
void ads8681_Init(void)
{
ADS_RST_L;
ADS_RVS_L;
HAL_Delay(100);
ADS_RST_H;
ADS8681_reg_config(0,0,0x00); //
}
void ADS8681_Display(void)
{
unsigned long temp1=0,temp=0;
//采樣5000次,去ADC抖動(dòng)
for (uint16_t i = 0; i <5000; i++)
{
temp1 = (unsigned long)ADS8681_Read();
temp = temp+temp1;
}
//ADC采樣轉(zhuǎn)換結(jié)果
temp = temp/5000;
temp = (temp-32767)*24576; // 轉(zhuǎn)換結(jié)公式 V=(采樣結(jié)果-32767)*最大量程/65535
temp = temp/65535*10;
OLED_ShowNum(41,2,temp,5,16);
}
復(fù)制代碼
51hei.png
(7.11 KB, 下載次數(shù): 66)
下載附件
2022-4-21 23:01 上傳
代碼可能有不足和錯(cuò)誤之處,僅供參考,vscode寫的:
ADS8681.7z
(5.22 MB, 下載次數(shù): 32)
2022-4-21 23:03 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
guolh
時(shí)間:
2022-12-5 21:20
支持~~~~
作者:
1990808983
時(shí)間:
2022-12-11 00:01
vscode不是寫web代碼的么。。嘿嘿
作者:
liusirqiqi
時(shí)間:
2024-10-10 14:03
你好,有個(gè)問題就是每次轉(zhuǎn)換不得需要一定的時(shí)間來(lái)等待采集完成嗎,我看你那個(gè)采集一次后就cs為1了,然后下次cs為0,進(jìn)行第二次采集,這個(gè)cs1到0 采集時(shí)間夠嗎
作者:
liusirqiqi
時(shí)間:
2024-10-10 14:03
你好,有個(gè)問題就是每次轉(zhuǎn)換不得需要一定的時(shí)間來(lái)等待采集完成嗎,我看你那個(gè)采集一次后就cs為1了,然后下次cs為0,進(jìn)行第二次采集,這個(gè)cs1到0 采集時(shí)間夠嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1