国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32的硬件SPI驅(qū)動(dòng)AD7124的方法

這篇具有很好參考價(jià)值的文章主要介紹了STM32的硬件SPI驅(qū)動(dòng)AD7124的方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、芯片介紹

AD7124是一款適合高精度測(cè)量應(yīng)用的低功耗、低噪聲、完整模擬前端。該器件內(nèi)置一個(gè)低噪聲24位Σ-Δ型模數(shù)轉(zhuǎn)換器(ADC),可配置來(lái)提供8個(gè)差分輸入或15個(gè)單端或偽差分輸入。片內(nèi)低噪聲級(jí)確保ADC中可直接輸入小信號(hào)??捎糜跍囟葴y(cè)量、壓力測(cè)量、工業(yè)過(guò)程控制、儀器儀表和只能發(fā)射器。

二、引腳排布

STM32的硬件SPI驅(qū)動(dòng)AD7124的方法
AD7124的接口屬于標(biāo)準(zhǔn)4線SPI,DOUT是從設(shè)備輸出至主設(shè)備的,連接單片機(jī)SPI模塊的MISO(主輸入從輸出);DIN是主設(shè)備數(shù)據(jù)輸出至從設(shè)備的,連接單片機(jī)SPI模塊的MOSI(主輸出從輸入)。SYNC和CLK懸空。
本項(xiàng)目我們使用SPI2模塊。

三、時(shí)序圖與驅(qū)動(dòng)程序

調(diào)試數(shù)字設(shè)備,我們需要一邊查看技術(shù)手冊(cè)的時(shí)序圖寫代碼,一邊掛上邏輯分析儀。

1. 芯片初始化

我們打開AD7124的DataSheet,對(duì)其時(shí)序圖進(jìn)行分析,如下:
下圖為AD7124的單次和連續(xù)轉(zhuǎn)換時(shí)序圖,由圖可知,SCLK在空閑狀態(tài)下是高電平。
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法
下圖是AD7124的讀&寫時(shí)序圖,無(wú)論是讀時(shí)序還是寫時(shí)序,均在第二個(gè)時(shí)鐘沿進(jìn)行數(shù)據(jù)轉(zhuǎn)換。
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法
所以AD7124初始化時(shí),需要將SPI模式設(shè)置為時(shí)鐘懸空高、數(shù)據(jù)捕獲于第2個(gè)時(shí)鐘沿

void AD7124_SPI_Config(void)
{
	SPI_InitTypeDef	SPI_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOB, &GPIO_InitStructure);	
 	GPIO_SetBits(GPIOB,GPIO_Pin_12);
	
	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//SPI主機(jī)
	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;	//發(fā)送接收8位幀結(jié)構(gòu)
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;			//時(shí)鐘懸空高
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;		//數(shù)據(jù)捕獲于第2個(gè)時(shí)鐘沿
	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;			//NSS信號(hào)由軟件控制
	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;		//定義波特率預(yù)分頻的值:波特率預(yù)分頻值為256
	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//數(shù)據(jù)傳輸從MSB位開始
	SPI_InitStructure.SPI_CRCPolynomial = 0;			//CRC值計(jì)算的多項(xiàng)式
	SPI_Init(SPI2, &SPI_InitStructure);  				//根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器
	
	SPI_Cmd(SPI2, ENABLE);
	AD7124_CS_H;		//片選拉高,失能AD7124
}

2. SPI讀寫函數(shù)

SPI讀寫是驅(qū)動(dòng)SPI設(shè)備的基礎(chǔ)。SPI的原理為
第一步:通過(guò)硬件或軟件NSS拉低從設(shè)備片選(CS),使能從設(shè)備。
第二步:通過(guò)MOSI引腳,發(fā)送8個(gè)時(shí)鐘周期,每個(gè)周期發(fā)送1個(gè)bit的數(shù)據(jù);通過(guò)寫入不同的地址,來(lái)決定對(duì)從設(shè)備的讀操作/寫操作。
第三步:8個(gè)倍數(shù)的時(shí)鐘周期發(fā)送完畢后,拉高片選,結(jié)束“發(fā)送/接收數(shù)據(jù)”。
這里我們把讀和寫都放在一個(gè)函數(shù)里面,因?yàn)镾PI如果只讀取,都需要發(fā)送8個(gè)時(shí)鐘周期和指令0XFF。

/**
  * @brief  AD7124的讀寫SPI操作
  * @param  Data : 需要傳輸?shù)臄?shù)據(jù)
  * @retval SPI讀到的數(shù)據(jù)
  */
uint8_t AD7124_SPI_ReadWrite(uint8_t Data)
{
	uint16_t retry=0;
	//超時(shí)等待
	while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)
	{
		retry++;
		if(retry>200)return 0;
	}
	SPI_I2S_SendData(SPI2, Data);		//MOSI主機(jī)發(fā)送給從機(jī)

	retry=0;
	while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)
	{
		retry++;
		if(retry>200)return 0;
	}
	return SPI_I2S_ReceiveData(SPI2);	//MISO接收從機(jī)數(shù)據(jù)
}

3. AD7124復(fù)位

芯片上電初始化前,必須復(fù)位才能使用。
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法
CS = 0 和 DIN = 1 的 64 個(gè) SCLK。這會(huì)復(fù)位 ADC 和所有寄存器內(nèi)容。也就是說(shuō),只要在AD7124 CS拉低的期間,在64個(gè)時(shí)鐘周期內(nèi)MOSI不斷輸出高電平,即可復(fù)位。代碼如下:

void AD7124_Reset(void)
{
	AD7124_CS_L;
	//提供大于64個(gè)寫操作,復(fù)位AD7124
	for(uint8_t a=0; a<9; a++)
	{
		AD7124_SPI_ReadWrite(0XFF);		//MOSI拉高
	}
	delay_us(60);
	AD7124_CS_H;
}

加入延時(shí)delay_us()的目的是,防止在硬件SPI還未發(fā)送完最后幾個(gè)時(shí)鐘周期,CS提前拉高,造成復(fù)位失敗。在讀寫操作中,同樣加入了延時(shí)處理。
邏輯分析儀采集到的波形如下:
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法

AD7124讀取ID

復(fù)位完成后需要讀取芯片的ID號(hào),不同封裝的ID號(hào)也不同,AD7124-4通常為0x14,而AD7124-8是0x12或0x04。SPI寫入命令0x40為讀寄存器,讀ID為0x05,故寫入0x45就可以讀出ID。
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法
0x40是發(fā)送讀取ID指令返回的字節(jié),0x14是ID號(hào)。

AD7124寫入配置

寫入配置需要根據(jù)寫時(shí)序圖編寫,讀時(shí)序如下
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法
我們復(fù)位后先對(duì)ADC_CTRL進(jìn)行操作,以開啟ADC控制寄存器,AD7124_ADC_CTRL_REG地址是0X01,如下圖DIN的第一個(gè)Byte,之后再把2字節(jié)的配置信息依次寫入,這個(gè)根據(jù)用戶需求配置,不在贅述。
通道和內(nèi)置濾波器配置方法相同。
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法

讀取數(shù)據(jù)

本次實(shí)驗(yàn)我們采用單次讀取模式。在讀取數(shù)據(jù)之前先要寫入命令0x42,之后需要讀取多少個(gè)Byte的字節(jié),就修改形式參數(shù)byte的數(shù)量即可。讀取一次單次采集到的數(shù)據(jù),需要3次SPI讀寫(24個(gè)時(shí)鐘周期),DIN輸出全高即可讀取。

uint32_t DATA=0;
uint32_t Rd_Ary[3];

uint32_t AD7124_Read_Data(uint8_t byte)
{
	for(uint8_t i=0; i<byte; i++)
	{
		Rd_Ary[i] = AD7124_SPI_ReadWrite(0xFF);
	}
	
	DATA = (Rd_Ary[0]<<16) + (Rd_Ary[1]<<8) + Rd_Ary[2];
	
	return DATA;
}

主函數(shù)讀取代碼如下:

	while(1)
	{
		AD7124_CS_L;
		AD7124_SPI_ReadWrite(0x42);			//讀操作
		Data = AD7124_Read_Data(3);			//Data采集結(jié)果
		AD7124_CS_H;
		
		data_temp = Data;
		data_last1 = (float)Vref/AD_Gain * (float)data_temp/(2*0X800000);	//單極性模式電壓轉(zhuǎn)換公式,單位mV
//		data_last1 = (float)Vref/AD_Gain * ((float)data_temp/0X800000-1);	//雙極性模式電壓轉(zhuǎn)換公式,單位mV
		data_last1 = data_last1 * 1000.0f;					//轉(zhuǎn)換為uV	
		printf("%X\r\n", Data);				//打印原始16進(jìn)制數(shù)據(jù)
		printf("%2f uV\r\n", data_last1);	//打印微伏
		
		delay_ms(100);
	}

讓我們采集11mV的直流信號(hào),下圖分別為實(shí)際測(cè)量和邏輯分析儀讀取到的數(shù)據(jù),為0x928D11。
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法

STM32的硬件SPI驅(qū)動(dòng)AD7124的方法

為了驗(yàn)證數(shù)據(jù)是否正確,我們查看此次串口讀取到的值:
STM32的硬件SPI驅(qū)動(dòng)AD7124的方法

原16進(jìn)制數(shù)據(jù)讀取正確,萬(wàn)用表實(shí)際測(cè)量11.0mV,實(shí)際讀取值為11.180mV,誤差在±100~200uV。因?yàn)樾盘?hào)發(fā)生器的線過(guò)長(zhǎng),影響了此次的精度。在PCB Layout時(shí),盡可能將ADC輸入的線路縮短,且圓弧布線,可以有效降低誤差。

資料鏈接

代碼可以在此處下載:

鏈接: https://download.csdn.net/download/m0_46369352/85612772文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-471955.html

到了這里,關(guān)于STM32的硬件SPI驅(qū)動(dòng)AD7124的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32模擬SPI協(xié)議獲取24位模數(shù)轉(zhuǎn)換(24bit ADC)芯片AD7791電壓采樣數(shù)據(jù)

    STM32模擬SPI協(xié)議獲取24位模數(shù)轉(zhuǎn)換(24bit ADC)芯片AD7791電壓采樣數(shù)據(jù)

    STM32大部分芯片只有12位的ADC采樣性能,如果要實(shí)現(xiàn)更高精度的模數(shù)轉(zhuǎn)換如24位ADC采樣,則需要連接外部ADC實(shí)現(xiàn)。AD7791是亞德諾(ADI)半導(dǎo)體一款用于低功耗、24位Σ-Δ型模數(shù)轉(zhuǎn)換器(ADC) ,適合低頻測(cè)量應(yīng)用,提供50 Hz/60 Hz同步抑制。 這里介紹基于AD7791的24位ADC采樣實(shí)現(xiàn)。 AD7791的管腳

    2024年02月09日
    瀏覽(41)
  • 普冉PY32系列(八) GPIO模擬和硬件SPI方式驅(qū)動(dòng)無(wú)線收發(fā)芯片XN297LBW

    普冉PY32系列(八) GPIO模擬和硬件SPI方式驅(qū)動(dòng)無(wú)線收發(fā)芯片XN297LBW

    普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU簡(jiǎn)介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode開發(fā)環(huán)境 普冉PY32系列(三) PY32F002A資源實(shí)測(cè) - 這個(gè)型號(hào)不簡(jiǎn)單 普冉PY32系列(四) PY32F002A/003/030的時(shí)鐘設(shè)置 普冉PY32系列(五) 使用JLink RTT代替串口輸出日志 普冉PY32系列(六) 通過(guò)I2C接口驅(qū)動(dòng)PCF8574擴(kuò)

    2024年02月08日
    瀏覽(52)
  • 【STM32】BLDC驅(qū)動(dòng)&控制開發(fā)筆記 | 07_SPI通信測(cè)試 - STM32F407用SPI配置DRV8323驅(qū)動(dòng)芯片

    【STM32】BLDC驅(qū)動(dòng)&控制開發(fā)筆記 | 07_SPI通信測(cè)試 - STM32F407用SPI配置DRV8323驅(qū)動(dòng)芯片

    最近在埋頭搞STM32 + 無(wú)刷直流電機(jī)控制,想實(shí)現(xiàn)用自己的STM32F407VGT6芯片板子,外加一塊驅(qū)動(dòng)板(目前選用到TI的DRV8302或者DRV8323驅(qū)動(dòng)芯片),搞定電機(jī)驅(qū)動(dòng),最后實(shí)現(xiàn)比較好的控制效果。如果不是同一塊芯片的同學(xué)也不用急著走,大體上都是可借鑒噠~ 本文主要實(shí)現(xiàn)使用SPI通信

    2024年02月08日
    瀏覽(35)
  • STM32F103硬件SPI驅(qū)動(dòng)ADS1256

    STM32F103硬件SPI驅(qū)動(dòng)ADS1256

    最近實(shí)驗(yàn)室有幾個(gè)項(xiàng)目都需要用到高分辨率AD轉(zhuǎn)換,于是就開始了ADS1256的開發(fā)。 新手,焊得丑,見諒(能用就行) 二: 本以為很容易就能做完,結(jié)果被采樣速率的問(wèn)題困擾了很久。 代碼如下,使用2.5V基準(zhǔn)源進(jìn)行測(cè)試,結(jié)果在讀ADS時(shí)經(jīng)常出現(xiàn)讀出0xFFFFFF的情況,只能忍住悲傷

    2024年02月12日
    瀏覽(113)
  • 基礎(chǔ)篇010.2 STM32驅(qū)動(dòng)RC522 RFID模塊之二:STM32硬件SPI驅(qū)動(dòng)RC522

    基礎(chǔ)篇010.2 STM32驅(qū)動(dòng)RC522 RFID模塊之二:STM32硬件SPI驅(qū)動(dòng)RC522

    目錄 1. 實(shí)驗(yàn)硬件及原理圖 1.1 RFID硬件 1.2 硬件原理圖 2. 單片機(jī)與RFID硬件模塊分析 3. 利用STM32CubeMX創(chuàng)建MDK工程 3.1 STM32CubeMX工程創(chuàng)建 3.2 配置調(diào)試方式 3.3 配置時(shí)鐘電路 3.4 配置時(shí)鐘 3.5 配置GPIO 3.6 配置SPI 3.7 配置串口 3.8 項(xiàng)目配置 4. MDK工程驅(qū)動(dòng)代碼調(diào)試 4.1 按鍵、LED程序 4.1.1 Us

    2024年02月09日
    瀏覽(22)
  • STM32配合CubeMX硬件SPI驅(qū)動(dòng)0.96寸OLED

    STM32配合CubeMX硬件SPI驅(qū)動(dòng)0.96寸OLED

    目錄 一、簡(jiǎn)單介紹 1.1 OLED 1.2 SPI協(xié)議 接口 優(yōu)點(diǎn) 缺點(diǎn) 數(shù)據(jù)傳輸 二、實(shí)戰(zhàn) 2.1 工程配置 2.2?測(cè)試工程 2.3 波形分析 三、驅(qū)動(dòng)OLED 3.1?初始化代碼 3.2 清屏函數(shù) 3.3 設(shè)置坐標(biāo)函數(shù) 3.4 顯示字符函數(shù) 3.5 顯示字符串函數(shù) 3.6 顯示圖片函數(shù) 附錄 驅(qū)動(dòng)代碼文件 oled.c oled.h f6x8.h 1.1 OLED 有機(jī)發(fā)

    2024年02月02日
    瀏覽(25)
  • stm32 hal庫(kù)硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

    stm32 hal庫(kù)硬件spi(軟件spi)驅(qū)動(dòng)1.8寸tft—lcd屏幕

    屏幕是嵌入式開發(fā)中的一個(gè)重要的部分,cdsn上有許多解釋原理的,還有很多是采用正點(diǎn)原子的屏幕來(lái)驅(qū)動(dòng)的,對(duì)于剛剛?cè)腴T不久的我們可能沒有資金去購(gòu)買較為昂貴的屏幕。而對(duì)于底層原理我們暫時(shí)也不必了解的那么深入,能點(diǎn)亮屏幕就是我們最大的快樂(lè)。 除了中景園的資

    2024年02月03日
    瀏覽(23)
  • 【STM32篇】SPI時(shí)序驅(qū)動(dòng)W25Q64(硬件SPI和模擬SPI)

    【STM32篇】SPI時(shí)序驅(qū)動(dòng)W25Q64(硬件SPI和模擬SPI)

    ????????由于MCU的FLASH空間有限,在特殊使用場(chǎng)所中會(huì)存在FLASH存儲(chǔ)不夠使用的情況。例如上篇中驅(qū)動(dòng)LCD屏,需要將一個(gè)中文字庫(kù)保存到MCU的FLASH中是不太現(xiàn)實(shí)的(STM32F103ZET6內(nèi)部FLASH大小512KB),為此可使用外部FLASH作為拓展。 ? ? ? ? W25Q64(64Mbit)是為系統(tǒng)提供一個(gè)最小的空

    2024年02月08日
    瀏覽(18)
  • 【DRV8323】電機(jī)驅(qū)動(dòng)芯片寄存器配置指南,通過(guò)STM32F407的SPI通信配置

    【DRV8323】電機(jī)驅(qū)動(dòng)芯片寄存器配置指南,通過(guò)STM32F407的SPI通信配置

    筆者計(jì)劃使用一塊使用到STM32F407控制芯片與DRV8323s驅(qū)動(dòng)芯片的板子,驅(qū)動(dòng)BLDC。了解到需要使用SPI通信來(lái)配置DRV8323s驅(qū)動(dòng)芯片,配置過(guò)程中涉及DRV8323數(shù)據(jù)手冊(cè)中提及的幾個(gè)寄存器,故寫此文做個(gè)記錄。 另外,DRV8323芯片和DRV8302、DRV8303、DRV8353都有極大的相似之處,可以相互參考

    2024年02月02日
    瀏覽(90)
  • PCAP01介紹和STM32模擬SPI驅(qū)動(dòng)

    PCAP01介紹和STM32模擬SPI驅(qū)動(dòng)

    Pcap01是德國(guó)acam公司設(shè)計(jì)的一款革命性的電容測(cè)量芯片。該芯片 內(nèi)部有DSP計(jì)算單元,可以直接將電容元件接到Pcap01芯片,然后芯片計(jì)算出容值大小,通過(guò)SPI總線將電容容值數(shù)據(jù)傳送給CPU,電容測(cè)量完全數(shù)字化。 PCAP測(cè)量的原理是基于電容的充放電時(shí)間比。 PCAP01有8個(gè)通道,每一

    2024年02月12日
    瀏覽(81)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包