完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
我的程序:
#include "spce061a.h" #include "nbc61.h" #define uchar unsigned char #define uint unsigned int #define W25Q_DeviceID 0xAB #define W25Q_ManufactDeviceID 0x90 #define Flash_CS PB3 // SPI总线的片选信号线 #define Flash_CLK PB6 // SPI总线的钟信号线 #define Flash_MOSI PB5 // SPI总线的串行数据输入线 #define Flash_MISO PB4 // SPI总线的串行数据输出线 void SPI_Delay(uchar time) { uchar i; for(i = 0; i < time; i++) { __asm("nop");__asm("nop");__asm("nop");__asm("nop"); __asm("nop");__asm("nop");__asm("nop");__asm("nop"); } } void Flash_Init(void) { Flash_CLK = 0; Flash_CS = 1; SPI_Delay(1); } uchar Flash_GetByte(void) //从SPI总线上读入一个字节 { uchar i, inData = 0; Flash_CLK = 1; SPI_Delay(1); for(i = 0; i < 8; i++) // 移8次 { Flash_CLK = 1; inData <<= 1; SPI_Delay(1); Flash_CLK = 0; SPI_Delay(1); inData |= Flash_MISO; SPI_Delay(1); } SPI_Delay(1); return inData; } void Flash_SendByte(unsigned char outData) //输出一个字节到SPI总线上 { uchar i = 0; Flash_CLK = 0; SPI_Delay(1); for(i = 0; i < 8; i++) { if((outData&0x80) == 0x80) // check if MSB is high Flash_MOSI = 1; else Flash_MOSI = 0; outData = (outData << 1);// 移出一位,送出至SPI总线的数据输入线SI上 Flash_CLK = 1; SPI_Delay(2); Flash_CLK = 0; SPI_Delay(2); } } uchar Flash_ReadDeviceID(void) { uchar byte = 0; Flash_CLK = 0; SPI_Delay(1); Flash_CS = 0; Flash_SendByte(W25Q_DeviceID); // send read device ID command (ABh) Flash_SendByte(0x00); // send 3 dummy address Flash_SendByte(0x00); Flash_SendByte(0x00); byte = Flash_GetByte(); Flash_CLK = 0; SPI_Delay(1); Flash_CS = 1; return byte; } uint Flash_ReadManufactDeviceID(uchar IdAddr) /* send W25Qxx selectable ID address 00H or 01H */ { uint IdData16 = 0; Flash_CLK = 0; SPI_Delay(1); Flash_CS = 0; SPI_Delay(1); Flash_SendByte(W25Q_ManufactDeviceID); // send read ID command (90h) Flash_SendByte(0x00); // send 3 dummy address Flash_SendByte(0x00); Flash_SendByte(IdAddr); IdData16 = Flash_GetByte(); IdData16 = (IdData16 << 8); IdData16 |= Flash_GetByte(); Flash_CLK = 0; SPI_Delay(1); Flash_CS = 1; return IdData16; } void Flash_IOInit(void) { PBDir3=1; // CS, (Dir:Attr:Data = 111 ) --> 设置IOB3为带数据缓存器的高电平输出 PBAttr3=1; PB3=1; PBDir4=0; // MISO, (Dir:Attr:Data = 001 ) --> 设置IOB4为带上拉输入 PBAttr4=0; PB4=1; PBDir5=1; // MOSI, (Dir:Attr:Data = 110 ) --> 设置IOB5为带数据缓存器的低电平输出 PBAttr5=1; PB5=0; PBDir6=1; // CLK, (Dir:Attr:Data = 110 ) --> 设置IOB6为带数据缓存器的低电平输出 PBAttr6=1; PB6=0; } |
|
相关推荐 |
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
552 浏览 0 评论
706 浏览 0 评论
883 浏览 0 评论
839 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
775 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17069 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 05:36 , Processed in 0.640470 second(s), Total 45, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3910