spi接口初始化
void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1時鐘
//GPIOF9,F10初始化設(shè)置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PB3~5復(fù)用功能輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//復(fù)用功能
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); //PB3復(fù)用為 SPI1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); //PB4復(fù)用為 SPI1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1); //PB5復(fù)用為 SPI1
//這里只針對SPI口初始化
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//復(fù)位SPI1
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//停止復(fù)位SPI1
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //設(shè)置SPI單向或者雙向的數(shù)據(jù)模式:SPI設(shè)置為雙線雙向全雙工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設(shè)置SPI工作模式:設(shè)置為主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //設(shè)置SPI的數(shù)據(jù)大小:SPI發(fā)送接收8位幀結(jié)構(gòu)
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行同步時鐘的空閑狀態(tài)為高電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內(nèi)部NSS信號有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //定義波特率預(yù)分頻的值:波特率預(yù)分頻值為256
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定數(shù)據(jù)傳輸從MSB位還是LSB位開始:數(shù)據(jù)傳輸從MSB位開始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式
SPI_Init(SPI1, &SPI_InitStructure); //根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器
SPI_Cmd(SPI1, ENABLE); //使能SPI外設(shè)
//SPI1_ReadWriteByte(0xff);//啟動傳輸
}
//SPI1速度設(shè)置函數(shù)
//SpeedSet:0~7
//SPI速度=fAPB2/2^(SpeedSet+1)
//fAPB2時鐘一般為84Mhz
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
SPI1->CR1&=0XFFC7;
SPI1->CR1|=SPI_BaudRatePrescaler; //設(shè)置SPI1速度
SPI_Cmd(SPI1,ENABLE);
}
//SPI1 讀寫一個字節(jié)
//TxData:要寫入的字節(jié)
//返回值:讀取到的字節(jié)
u8 SPI1_ReadWriteByte(u8 TxData)
{
u8 retry = 0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
{
retry++;
if(retry > 200) return 0;
}//等待發(fā)送區(qū)空
SPI_I2S_SendData(SPI1, TxData); //通過外設(shè)SPIx發(fā)送一個byte 數(shù)據(jù)
retry = 0;
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
{
retry++;
if(retry > 200) return 0;
} //等待接收完一個byte
return SPI_I2S_ReceiveData(SPI1); //返回通過SPIx最近接收的數(shù)據(jù)
}
FRAM接口
#ifndef __FRAM_H
#define __FRAM_H
#ifdef __cplusplus
extern “C” {
#endif
#include “stm32f4xx.h”
#define CMD_WREN 0x06
#define CMD_WRDI 0x04
#define CMD_RDSR 0x05
#define CMD_WRSR 0x01
#define CMD_READ 0x03
#define CMD_WRITE 0x02
#define GPIO_CSN GPIOA
#define GPIO_Pin_CSN GPIO_Pin_4
#define GPIO_RCC_CSN RCC_AHB1Periph_GPIOA
#define Set_FRAM_CSN() GPIO_SetBits(GPIO_CSN,GPIO_Pin_CSN)
#define Clr_FRAM_CSN() GPIO_ResetBits(GPIO_CSN,GPIO_Pin_CSN)
void FRAM_Init(void);
void FRAM_Write(u16 writeaddr,u8 *fbuf,u16 n);
void FRAM_Read(u16 readaddr,u8 *fbuf,u16 n);
#ifdef __cplusplus
}
#endif
#endif
#include “fram.h”
#include “spi.h”
//初始化SPI FLASH的IO口
void FRAM_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(GPIO_RCC_CSN, ENABLE);//使能GPIOB時鐘
//GPIOA4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CSN;//PB14
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//輸出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIO_CSN, &GPIO_InitStructure);//初始化
Set_FRAM_CSN();
SPI1_Init(); //初始化SPI
Clr_FRAM_CSN();
SPI1_ReadWriteByte(0xff);//啟動傳輸
Set_FRAM_CSN(); //SPI FLASH不選中
}
void FRAM_Write_Enable(void)
{
u16 i;
Clr_FRAM_CSN();
SPI1_ReadWriteByte(CMD_WREN); //發(fā)送讀取命令
Set_FRAM_CSN();
i=10;
while(i–);
}
void FRAM_Write(u16 writeaddr,u8 *fbuf,u16 n)
{
u16 i;
FRAM_Write_Enable(); //操作命令之前必須寫使能
Clr_FRAM_CSN(); //使能器件
SPI1_ReadWriteByte(CMD_WRITE); //發(fā)送讀取命令
SPI1_ReadWriteByte((u8)((writeaddr)>>8)); //發(fā)送16bit地址
SPI1_ReadWriteByte((u8)writeaddr);
for(i=0;i SPI1_ReadWriteByte(fbuf[i]); //循環(huán)讀數(shù) } Set_FRAM_CSN(); } void FRAM_Read(u16 readaddr,u8 *fbuf,u16 n) { u16 i; FRAM_Write_Enable(); //操作命令之前必須寫使能 Clr_FRAM_CSN(); //使能器件 SPI1_ReadWriteByte(CMD_READ); //發(fā)送讀取命令 SPI1_ReadWriteByte((u8)((readaddr)>>8)); //發(fā)送16bit地址 SPI1_ReadWriteByte((u8)readaddr); for(i=0;i fbuf[i]=SPI1_ReadWriteByte(0xff); //循環(huán)讀數(shù) } Set_FRAM_CSN(); } 總結(jié) 1、操作讀寫之前要發(fā)送寫使能命令才進行操作 2、FRAM可以按字節(jié)操作或連接操作。
上一篇:絕對值編碼器數(shù)據(jù)接收的問題
下一篇:STM32 網(wǎng)絡(luò)通信Web Server中 SSI與CGI的應(yīng)用解析
推薦閱讀
史海拾趣
隨著業(yè)務(wù)的不斷發(fā)展,Elekon開始尋求更廣闊的市場空間。公司制定了全球化戰(zhàn)略,積極開拓國際市場。通過參加國際展會、建立海外銷售網(wǎng)絡(luò)等方式,Elekon成功將產(chǎn)品打入國際市場,并贏得了眾多客戶的青睞。同時,Elekon還與國際知名電子企業(yè)建立了合作關(guān)系,共同研發(fā)新產(chǎn)品、開拓新市場。
Decawave公司成立于2007年,總部位于愛爾蘭都柏林。成立之初,公司就專注于超寬帶(UWB)技術(shù)的研發(fā)。在初創(chuàng)階段,Decawave面臨著技術(shù)難度大、資金緊張等挑戰(zhàn)。然而,憑借對UWB技術(shù)的深入理解和研究,公司成功開發(fā)出了具有高精度定位能力的UWB芯片,這一技術(shù)突破為Decawave在電子行業(yè)中贏得了聲譽。
隨著FK系列飛機在全球范圍內(nèi)的知名度不斷提升,B&F公司意識到,要想進一步拓展市場,必須建立完善的全球分銷網(wǎng)絡(luò)。于是,公司開始積極尋找合作伙伴,并在全球范圍內(nèi)建立分銷點。通過這一舉措,B&F公司的產(chǎn)品得以迅速進入更多國家,進一步提升了公司的市場份額和影響力。
在電子行業(yè)中,知識產(chǎn)權(quán)的保護尤為重要。成都成電硅海公司非常重視知識產(chǎn)權(quán)的申請和保護工作。公司成立了專門的知識產(chǎn)權(quán)部門,負責(zé)專利、商標等知識產(chǎn)權(quán)的申請和管理。同時,公司還積極參與各種知識產(chǎn)權(quán)的維權(quán)行動,維護自身的合法權(quán)益。這種對知識產(chǎn)權(quán)的重視和保護,不僅提升了公司的核心競爭力,也為公司在電子行業(yè)的發(fā)展提供了有力的法律保障。
隨著環(huán)保意識的日益提高,ECC積極響應(yīng)國家號召,致力于綠色環(huán)保產(chǎn)品的研發(fā)和生產(chǎn)。公司投入大量資金研發(fā)環(huán)保型電容器,采用環(huán)保材料和工藝,減少生產(chǎn)過程中的污染排放。此外,ECC還積極參與公益事業(yè),捐款支持環(huán)保組織和慈善機構(gòu)。
芯朋微電子成立于2005年,初期由一群來自中國華晶電子集團的專家組成。公司創(chuàng)立之初,就專注于電源管理芯片的研發(fā)。經(jīng)過數(shù)年的技術(shù)積累,2008年,芯朋微電子成功研發(fā)出“700V單片MOS集成AC-DC電源芯片”系列,這一突破打破了進口芯片的壟斷,贏得了國內(nèi)家電品牌廠商的認可,為公司在家電領(lǐng)域的快速發(fā)展奠定了基礎(chǔ)。
最低照度是測量攝像機感光度的一種方法,換句話說,攝像機能在多黑的條件下看到可用的影像。但是因為沒有管理的國際標準,因此每個大型CCD制造商都有自己測量CCD感光度的方法。然而一個標注為(1Lux,F(xiàn)10)的攝像機能和標注為(0.01Lux,F(xiàn)10)的攝 ...… 查看全部問答∨ |
在MDK中數(shù)據(jù)包如何定位地址下載到STM32中去 如果在您的STM32項目中需要用到一個比較大的數(shù)據(jù)庫,程序需要訪問它,那么你可以通過修改連接腳本把你的數(shù)據(jù)定位到你指定的區(qū)間,或者直接修改Target對話框,從Flash或者Ram中分出一段區(qū)間來存放你的數(shù)據(jù)包文件,這樣就可以定位地址下載到STM32中去 ...… 查看全部問答∨ |
我的VS2005的菜單怎么亂套了,在生成菜單選項下,生成成為了重新生成的功能,部暑成為了重新生成+部暑(下載)的功能,在調(diào)試菜單下,啟動調(diào)試成為了部暑(下載)+ 我的VS2005的菜單怎么亂套了,在生成菜單選項下,生成成為了重新生成的功能,部暑成為了重新生成+部暑(下載)的功能,在調(diào)試菜單下,啟動調(diào)試成為了部暑(下載)+啟動調(diào)試功能,怎么調(diào)回去啊!… 查看全部問答∨ |
|
關(guān)于ARM+DSP雙核開發(fā)系統(tǒng)的問題 我們現(xiàn)在做的一個關(guān)于嵌入式課題在開發(fā)系統(tǒng)選型時遇到了一點問題,因為我們的系統(tǒng)既需要良好的GUI又需要較強大的信號處理能力,因此我們不得不把目光放到了arm+dsp雙核開發(fā)系統(tǒng)上,但過去的雙核開發(fā)系統(tǒng)應(yīng)用相對較少,大多是選取一片獨立的arm芯片 ...… 查看全部問答∨ |
|
QQ 117223252 QQ 163479 http://www.xp13.com 能脫以上網(wǎng)站的登陸器的殼 可以修改里面圖片和連接地址 電話 13487084987 坐機 027-88230573… 查看全部問答∨ |
請問下各位大蝦,目前在調(diào)試W25Q32,miso引腳沒有輸出,怎么辦? 主芯片:lm3S9B92 dataflash:試過W25Q32和W25Q80 SPI時鐘:1Mbit 表現(xiàn)如下: 初始化SPI正常,讀取ID的值為0xff,用示波器看SCK和mosi都有信號,CS也有,SCK的頻率也確實是1Mbit,從而應(yīng)該可以判斷SPI的初始化沒有問題。而miso持續(xù)為高。MISO上 ...… 查看全部問答∨ |
LDO 是新一代的集成電路穩(wěn)壓器,它與三端穩(wěn)壓器最大的不同點在于,LDO 是一個自耗很低 的微型片上系統(tǒng)(SoC)。LDO 按 其 靜 態(tài) 耗 流 來 分 , 分 為 OmniPowerTM / MicroPowerTM / NanoPowerTM 三種產(chǎn)品。OmniPowerTM LDO 的靜態(tài)電流在 10 ...… 查看全部問答∨ |
FPGA以太通信開發(fā) 項目預(yù)算:¥ 50,000~100,000 開發(fā)周期: 14 天 項目分類: 嵌入式 競標要求: 項目標簽: fpga ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 專利表明三星正開發(fā)可折疊的柔性電池技術(shù)
- 三星Galaxy Z Flip 5G版工信部證件照曝光
- 三星國外官網(wǎng)首曝光Galaxy Note 20 Ultra渲染圖
- 一加Nord公布曝光:驍龍765G/雙挖孔屏
- 華碩ROG游戲手機3定了:將于7月22日發(fā)布
- 深度:車載OS的商戰(zhàn)江湖
- 發(fā)布全球首個自動駕駛網(wǎng)絡(luò)安全標準 英國為當自動駕駛領(lǐng)頭羊
- 本田發(fā)布了智導(dǎo)互聯(lián)系統(tǒng)等在內(nèi)的多項新舉措
- 自動駕駛?cè)R爭先,谷歌/Tesla/通用汽車孰能獲勝?
- 一文讀完特斯拉整體情況和產(chǎn)業(yè)鏈圖