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

【STM32L496】使用HAL庫(kù)實(shí)現(xiàn)SPI寫入/讀取數(shù)據(jù)(AD5421)

這篇具有很好參考價(jià)值的文章主要介紹了【STM32L496】使用HAL庫(kù)實(shí)現(xiàn)SPI寫入/讀取數(shù)據(jù)(AD5421)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

SPI原理

SPI協(xié)議詳解(圖文并茂+超詳細(xì))
SPI超詳細(xì)解析
【STM32筆記】HAL庫(kù)中的SPI傳輸(可利用中斷或DMA進(jìn)行連續(xù)傳輸)

AD5421芯片了解

AD5421是一款集成器件,設(shè)計(jì)用于環(huán)路供電型4-20mA智能發(fā)射器應(yīng)用。AD5421在單芯片內(nèi)提供如下特性和功能:16位DAC和電流放大器,用于對(duì)環(huán)路電流進(jìn)行數(shù)字控制;用于為整個(gè)發(fā)射器供電的穩(wěn)壓器;基準(zhǔn)電壓源;故障報(bào)警功能;靈活的SPI兼容型串行接口;增益和失調(diào)調(diào)整寄存器;以及其它特性和功能。

AD5421為四線制信號(hào)芯片,這四個(gè)信號(hào)線分別為MISO、MOSI、CS、SCLK,即主入從出、主出從入、片選、時(shí)鐘。片選信號(hào)線在有的地方也稱SS,其是由主設(shè)備控制的,用來(lái)確定從機(jī)且低電平有效。當(dāng)編寫程序時(shí),通常采用GPIO模擬片選信號(hào)(人為拉低pin電平)。
在本文,需要利用AD5421實(shí)現(xiàn)寫入和讀取數(shù)據(jù)的功能,首先通過芯片手冊(cè)可以看到,實(shí)現(xiàn)寫入功能的第八位是0,讀取是1。
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件
數(shù)據(jù)格式為8位命令+16位數(shù)據(jù)(+8位CRC循環(huán)校驗(yàn))
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件
AD5421數(shù)據(jù)傳輸時(shí)序圖如下圖所示,當(dāng)SYNC為低電平時(shí)有效,此時(shí),當(dāng)SCLK為下降沿時(shí)傳輸數(shù)據(jù),當(dāng)SYNC為高電平時(shí),輸入的數(shù)據(jù)會(huì)鎖存。
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件

HAL庫(kù)配置及初始化

根據(jù)芯片手冊(cè)配置引腳和SPI引腳模式參數(shù),開啟中斷。
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件

hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件
SPI的片選信號(hào)設(shè)置為GPIO_Output,低電平有效,傳輸速度Low
hal庫(kù) spi,stm32,單片機(jī),嵌入式硬件
配置完成后,同I2C一樣,會(huì)生成一個(gè)SPI 的句柄。

SPI_HandleTypeDef hspi2;

部分代碼

通過AD5421實(shí)現(xiàn)SPI通信
以下是基于HAL庫(kù)的SPI收發(fā)函數(shù),主要用到HAL_SPI_TransmitHAL_SPI_Receive這兩個(gè)函數(shù)實(shí)現(xiàn),這兩個(gè)函數(shù)相對(duì)應(yīng)的就是HAL_SPI_Transmit_ITHAL_SPI_Receive_IT,這兩個(gè)函數(shù)和前兩個(gè)函數(shù)的差別就是,前者是在阻塞模式下發(fā)送和接收消息,而后者是利用中斷在非阻塞的模式下發(fā)送接收消息,前兩個(gè)函數(shù)無(wú)法連續(xù)發(fā)送或接收消息,而后兩個(gè)函數(shù)可以連續(xù)發(fā)送或接收消息。除此以外,還有用DMA直接存儲(chǔ)模式讀寫消息,使用示波器也可以看到相關(guān)波形,這里沒有演示,可以查看文章開頭的第三個(gè)鏈接,里面有對(duì)這幾個(gè)函數(shù)比較詳細(xì)的解釋。
HAL_GPIO_WritePin (SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_RESET);就是之前一直在講的軟件片選,人為拉高置低電平,啟動(dòng)SPI收發(fā)數(shù)據(jù)。

//this spi's transmisson can not continuous transmission of data.start
int spi_transmit(uint8_t *tpdat,uint16_t tdsize)
{	
	HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_RESET);	
	if(tpdat != NULL || tdsize > 0)
	{
		HAL_SPI_Transmit(&hspi2,tpdat,tdsize,0xFFFF);
		HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_SET);
		delay_ms(10);
		return 1;
	}
	else
	{
		HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_SET);
		return 0;
	}
}
int spi_receive(uint8_t *rpdat,uint16_t rdsize)
{
	HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_RESET);	
	if(rpdat != NULL || rdsize > 0)
	{
		HAL_SPI_Receive(&hspi2,rpdat,rdsize,0xFFFF);
		HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_SET);
		delay_ms(10);
		return 1;
	}
	else
	{
		HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_SET);
		return 0;
	}
}
//this spi's transmisson can not continuous transmission of data.end

AD5421的讀寫數(shù)據(jù)函數(shù),輸入移位寄存器為24位(如果需要對(duì)數(shù)據(jù)進(jìn)行CRC糾錯(cuò)校驗(yàn),則為32位,這里沒用到)。
24/32位字寬的數(shù)據(jù)在串行時(shí)鐘輸入SCLK的控制下優(yōu)先載入器件的MSB位,所以在wbuf[1]時(shí)需要把data右移八位。
輸入移位寄存器由8位地址/命令字節(jié)、16位數(shù)據(jù)字和可選的8位CRC組成。

寫序列開始于SYNC信號(hào)的下降沿,數(shù)據(jù)在SCLK下降沿通過SDIN數(shù)據(jù)線輸入。在SYNC上升沿,24位數(shù)據(jù)被鎖存,然后傳輸?shù)较嚓P(guān)的寄存器并執(zhí)行規(guī)定的功能(DAC輸出改變或工作模式改變)。

void ad5421_write(uint8_t wadd,uint16_t data)
{
	uint8_t wbuf[3];
	memset(wbuf,0,sizeof(wbuf));
	wbuf[0]=wadd&0x7F;
	wbuf[1]=data>>8;
	wbuf[2]=data&0x00FF;
	spi_transmit(wbuf,3);
}

uint16_t ad5421_read(uint8_t radd)
{
	uint8_t rbuf[3];
	uint8_t read[3];
	memset(rbuf,0,sizeof(rbuf));
	rbuf[0]=radd;
	rbuf[1]=0;
	rbuf[2]=0;
	spi_transmit(rbuf,3);
	
	rbuf[0]=0x09;	
	rbuf[1]=0;	
	rbuf[2]=0;	
	HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_RESET);	
//	HAL_SPI_Transmit(&hspi2,rbuf,1,0xFFFF);
//	HAL_SPI_Receive(&hspi2,rbuf,2,0xFFFF);
	
	HAL_SPI_TransmitReceive(&hspi2,rbuf,read,3,0xFFFF);
	HAL_GPIO_WritePin	(SPI_CS_GPIO_Port,SPI_CS_Pin,GPIO_PIN_SET);	
	
	return (read[1]<<8)|(read[2]&0xFF);
}

在這里有一個(gè)函數(shù)HAL_SPI_TransmitReceive這個(gè)函數(shù)是指在阻塞狀態(tài)下發(fā)送或接收一段數(shù)據(jù),該函數(shù)在文件stm32l4xx_hal_spi.c下。

/**
  * @brief  Transmit and Receive an amount of data in blocking mode.
  * @param  hspi pointer to a SPI_HandleTypeDef structure that contains
  *               the configuration information for SPI module.
  * @param  pTxData pointer to transmission data buffer
  * @param  pRxData pointer to reception data buffer
  * @param  Size amount of data to be sent and received
  * @param  Timeout Timeout duration
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,uint32_t Timeout);

遇到的問題

SPI和I2C的代碼編寫步驟相似,思路也比較相像,但由于SPI讀寫寄存器這個(gè)完成了有一段時(shí)間了,所以遇到了什么問題其實(shí)印象有點(diǎn)模糊了,如果想到什么再加吧。
后面在實(shí)現(xiàn)讀芯片溫度和讀VLoop功能時(shí)有遇到過問題,下文再述。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-770228.html

到了這里,關(guān)于【STM32L496】使用HAL庫(kù)實(shí)現(xiàn)SPI寫入/讀取數(shù)據(jù)(AD5421)的文章就介紹完了。如果您還想了解更多內(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 通過HAL庫(kù)實(shí)現(xiàn)雙機(jī)SPI程序燒錄之一SPI雙機(jī)通信

    STM32 通過HAL庫(kù)實(shí)現(xiàn)雙機(jī)SPI程序燒錄之一SPI雙機(jī)通信

    主要功能:STM32F407VET6作為主機(jī),STM32F103ZET6作為從機(jī)實(shí)現(xiàn)F4通過SPI接口發(fā)送數(shù)據(jù)給F1進(jìn)行串口打印功能 主要是使用STM32cubemx進(jìn)行相關(guān)配置(使用這個(gè)軟件不能只用于生成代碼,要學(xué)會(huì)讀懂生成的每一句代碼這樣才方便后期調(diào)試,不然出現(xiàn)問題根本找不到) 選擇Serial Waire進(jìn)行調(diào)試

    2024年02月08日
    瀏覽(26)
  • STM32L4 HAL庫(kù)通過串口通信改變PWM占空比

    STM32L4 HAL庫(kù)通過串口通信改變PWM占空比

    使用串行通信的目的是為了讓上位機(jī)能控制STM32來(lái)改變PWM的輸出 這里用的是定時(shí)器TIM4的3通道,當(dāng)然也可以改為其他的定時(shí)器,具體請(qǐng)參考手冊(cè) 偷下懶,直接拿正點(diǎn)原子的例子程序修改了一下。 示例用的是UART1 引腳是PA9(TX),PA10(RX) 主要修改的地方在接收數(shù)據(jù)的部分,我用l

    2024年02月15日
    瀏覽(28)
  • STM32CubeMX配置HAL庫(kù)實(shí)現(xiàn)SPI-DMA的遞歸調(diào)用

    STM32CubeMX配置HAL庫(kù)實(shí)現(xiàn)SPI-DMA的遞歸調(diào)用

    核心: STM32F407ZET6?? 外設(shè)ADC: ADS1258? ?數(shù)量:3個(gè)? ?※ 核心與3個(gè)ADC使用SPI總線 “一主多從” 方式連接,PCB布線的方式與下圖一致。 ※ 在電路板上STM32與三個(gè)ADS1258在同一直線上分布,STM32在一端,三個(gè)ADC依次排布。 ※ 離STM32最遠(yuǎn)ADC的DRDY硬件管腳與STM32的EXTI line4 interrupt連接

    2024年02月15日
    瀏覽(39)
  • 【STM32】基于HAL庫(kù)建立自己的低功耗模式配置庫(kù)(STM32L4系列低功耗所有配置匯總)

    【STM32】基于HAL庫(kù)建立自己的低功耗模式配置庫(kù)(STM32L4系列低功耗所有配置匯總)

    【STM32】基于HAL庫(kù)建立自己的低功耗模式配置庫(kù)(STM32L4系列低功耗所有配置匯總) 此文章是討論將先前所有的低功耗配置功能整合起來(lái)的一個(gè)庫(kù)(適用于STM32L4系列) 目前除了普通喚醒方式外 加入了UART喚醒和RTC喚醒配置 如果后續(xù)有更多喚醒加入(如I2C等 將直接在后續(xù)的文章

    2024年02月19日
    瀏覽(23)
  • STM32軟件模擬實(shí)現(xiàn)IIC寫入和讀取AT24C02(STM32CubeMx配置)

    STM32軟件模擬實(shí)現(xiàn)IIC寫入和讀取AT24C02(STM32CubeMx配置)

    IIC:Inter Integrated Circuit,集成電路總線,是一種 同步 串行 半雙工 通信總線。 在使用IIC時(shí)分為硬件IIC以及軟件IIC,下圖為兩者的區(qū)別: 在使用IIC前先來(lái)了解一下IIC總線結(jié)構(gòu)圖,即下圖: 從圖中可以看出IIC有兩個(gè)雙向信號(hào)線,一根是數(shù)據(jù)線SDA,一根是時(shí)鐘線SCL,并且都接上拉

    2024年02月04日
    瀏覽(19)
  • STM32CubeMx實(shí)現(xiàn)ADC多通道+DMA讀?。℉AL庫(kù))

    STM32CubeMx實(shí)現(xiàn)ADC多通道+DMA讀?。℉AL庫(kù))

    目錄 一、實(shí)驗(yàn)結(jié)果 ?二、STM32CubeMx配置 三、main.c測(cè)試代碼 1、RCC配置 (外部晶振選擇8MHz。設(shè)置相應(yīng)的分頻器M=8,倍頻器倍頻系數(shù)N=336,分頻器分頻系數(shù)P=2,那么主PLL生成的第一個(gè)輸出高速時(shí)鐘PLLP為:168MHz)? 2、SYS配置 ?3、ADC(規(guī)則)通道配置(獨(dú)立模式,預(yù)分頻4分頻,1

    2024年02月15日
    瀏覽(31)
  • STM32 HAL庫(kù) STM32CubeMX -- SPI

    STM32 HAL庫(kù) STM32CubeMX -- SPI

    SPI (Serial Peripheral Interface)協(xié)議,即串行外圍設(shè)備接口,是一種高速全雙工的通信總線。 它被廣泛地使用在ADC、LCD 等設(shè)備與MCU 間,要求通訊速率較高的場(chǎng)合。 SPI 通訊使用3 條總線及片選線, 3 條總線分別為SCK、MOSI、MISO,片選線為SS(CS) ,它們的作用介紹如下: (1) SS( Slav

    2024年02月13日
    瀏覽(27)
  • STM32F429 Discovery開發(fā)板應(yīng)用:實(shí)現(xiàn)SPI-SD Card文件寫入(搭載FatFS文件系統(tǒng))

    STM32F429 Discovery開發(fā)板應(yīng)用:實(shí)現(xiàn)SPI-SD Card文件寫入(搭載FatFS文件系統(tǒng))

    MCU:STM32F429ZIT6 開發(fā)環(huán)境:STM32CubeMX+MDK5 ? 外購(gòu)了一個(gè)SPI接口的SD Card模塊,想要實(shí)現(xiàn)SD卡存儲(chǔ)數(shù)據(jù)的功能。 首先需要打開STM32CubeMX工具。輸入開發(fā)板MCU對(duì)應(yīng)型號(hào),找到開發(fā)板對(duì)應(yīng)封裝的MCU型號(hào),雙擊打開(圖中第三)。 ? 此時(shí),雙擊完后會(huì)關(guān)閉此界面,然后打開一個(gè)新界面。

    2024年02月08日
    瀏覽(27)
  • STM32使用HAL庫(kù)SPI驅(qū)動(dòng)W25Q16 使用FATFS文件系統(tǒng)+USB虛擬U盤

    STM32使用HAL庫(kù)SPI驅(qū)動(dòng)W25Q16 使用FATFS文件系統(tǒng)+USB虛擬U盤

    使用stm32F407驅(qū)動(dòng)W25Q16,使用FATFS文件系統(tǒng),USB虛擬優(yōu)盤功能,W25Q16一共512個(gè)扇區(qū),其中128作為flash存取相關(guān)數(shù)據(jù),其他的384個(gè)扇區(qū)用作虛擬U盤使用 W25Q16.c W25Q16.h user_diskio.c usbd_storage_if.c main.c STORAGE_BLK_NBR 表示扇區(qū)數(shù)量 STORAGE_BLK_SIZ 表示扇區(qū)大小 電腦上的U盤容量跟這兩個(gè)參數(shù)密

    2024年04月28日
    瀏覽(24)
  • 【STM32 CubeMX】SPI HAL庫(kù)編程

    【STM32 CubeMX】SPI HAL庫(kù)編程

    STM32 CubeMX 是一款由 STMicroelectronics 提供的圖形化配置工具,用于生成 STM32 微控制器的初始化代碼和項(xiàng)目框架。在 STM32 開發(fā)中,使用 CubeMX 可以大大簡(jiǎn)化初始化過程,并幫助開發(fā)者快速構(gòu)建應(yīng)用程序。其中,SPI(串行外設(shè)接口)是一種常用的通信協(xié)議,它在連接外部設(shè)備時(shí)非常

    2024年02月19日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包