完整源碼.rar
(1.4 MB, 售價: 2 E幣)
2020-6-4 16:58 上傳
點擊文件名下載附件
售價: 2 E幣 [記錄]
[ 購買]
使用了固件庫,附件中用windows畫圖工具畫了幾幅示意圖幫助理解,圖畫得比較丑,希望能幫助到其他人
220013bw4mp4665541ljp5.png (274.15 KB)
下載附件
2020-6-4 16:57 上傳
220027kgsazoyysra5bos6.png (101.8 KB)
下載附件
2020-6-4 16:57 上傳
部分源程序如下:完整源碼請參考本文附件- #include "stm32f4xx.h"
- #include "spi.h"
- void spi1_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- SPI_InitTypeDef SPI_InitStruct;
-
- //開啟SPI1 和 GPIOB的時鐘
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
-
-
- //設置引腳 PB3--SPI1_SCK PB4--SPI1_MISO PB5--SPI1_MOSI
- //模式、推挽、是否上拉等等
-
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//復用模式
- GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽輸出
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5; //3 4 5號引腳
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//內部上拉電阻
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速
- GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- //復用為SPI1
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1);
-
- //PB14---作為 W25Q128的片選
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
- //GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽輸出
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14; //14號引腳
- //GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//內部上拉電阻
- //GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速
- GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- //默認先不選中W25Q128
- CS = 1;
- //關于主從模式 高低位那個先發 8或16bits 時鐘的頻率 極性和相位
- SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
- //W25Q128 MODE 3
- SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;//從機mode 3的需求
- SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;//從機mode 3的需求
- SPI_InitStruct.SPI_CRCPolynomial = 7;//校驗和多項式有幾項
- SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;//從機的需求
- SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//兩線全雙工
- SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;//從機的需要
- SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
- SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;//軟件管理片選引腳
- SPI_Init(SPI1, &SPI_InitStruct);
- //使能SPI1
- SPI_Cmd(SPI1, ENABLE);
-
- }
- unsigned char spi1_write_read_byte(unsigned char data)
- {
- //等上一次發送完成
- while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) != SET);
-
- SPI_I2S_SendData(SPI1, data);
-
- //等接收緩沖非空
- while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != SET);
-
- return SPI_I2S_ReceiveData(SPI1);
- }
復制代碼
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|