STM32模拟SPI的程序
(资料图片仅供参考)
最近完成的一个项目因为SPI管脚被别的资源占用了,只能通过模拟SPI对存储器进行操作。最后测试发现模拟SPI的速度也很快,和硬件SPI相比感觉不到太大的差异。现将模拟SPI的程序分享如下:
管脚定义,大家可以根据需要自行修改,任何一个GPIO都可以模拟SPI
#define SPI_WP_PIN GPIO_Pin_6#define SPI_WP_PORT GPIOC#define SPI_CS_PIN GPIO_Pin_15#define SPI_CS_PORT GPIOA#define SPI_CLK_PIN GPIO_Pin_3#define SPI_CLK_PORT GPIOB#define SPI_MOSI_PIN GPIO_Pin_12#define SPI_MOSI_PORT GPIOC#define SPI_MISO_PIN GPIO_Pin_4#define SPI_MISO_PORT GPIOB#define SPI_BASE SPI3#define SPI_FLASH_CS_LOW() GPIO_ResetBits(SPI_CS_PORT, SPI_CS_PIN) /* Select SPI MEM1: ChipSelect pin low */#define SPI_FLASH_CS_HIGH() GPIO_SetBits(SPI_CS_PORT, SPI_CS_PIN) /* Deselect SPI MEM1: ChipSelect pin high */#define SPI_FLASH_WP_LOW() GPIO_ResetBits(SPI_WP_PORT, SPI_WP_PIN) //PC4#define SPI_FLASH_WP_HIGH() GPIO_SetBits(SPI_WP_PORT, SPI_WP_PIN) //PC4
模拟SPI MOSI MOSI CLK
//模拟MOSIvoid SPI_MOSI(unsigned char Status){if(Status)GPIO_WriteBit(SPI_MOSI_PORT,SPI_MOSI_PIN,Bit_SET);elseGPIO_WriteBit(SPI_MOSI_PORT,SPI_MOSI_PIN,Bit_RESET);}//模拟CLKvoid SPI_CLK(unsigned char Status){if(Status)GPIO_WriteBit(SPI_CLK_PORT,SPI_CLK_PIN,Bit_SET);elseGPIO_WriteBit(SPI_CLK_PORT,SPI_CLK_PIN,Bit_RESET);}//模拟MISOunsigned char SPI_MISO(void){if(GPIO_ReadInputDataBit(SPI_MISO_PORT,SPI_MISO_PIN))return 1;else return 0;}
SPI初始化
void gd25qxxInit(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = SPI_MOSI_PIN; //PA5:SCK,PA7:MOSIGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出GPIO_Init(SPI_MOSI_PORT, &GPIO_InitStructure);SPI_MOSI(1);GPIO_InitStructure.GPIO_Pin = SPI_CLK_PIN; //PA5:SCK,PA7:MOSIGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出GPIO_Init(SPI_CLK_PORT, &GPIO_InitStructure);SPI_CLK(1);GPIO_InitStructure.GPIO_Pin = SPI_MISO_PIN ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(SPI_MISO_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = SPI_CS_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(SPI_CS_PORT, &GPIO_InitStructure);SPI_FLASH_CS_HIGH();GPIO_InitStructure.GPIO_Pin = SPI_WP_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(SPI_WP_PORT, &GPIO_InitStructure);SPI_FLASH_WP_HIGH();}
SPI数据输入输出
uint8_t gd25qxxSendByte(uint8_t byte){unsigned char i,Result = 0;;for(i=0;i<8;i++){if(byte & 0x80)SPI_MOSI(1);else SPI_MOSI(0);byte <<= 1;SPI_CLK(0);SPI_CLK(1);Result <<= 1;if(SPI_MISO()) Result |= 0x01;}SPI_CLK(0);return(Result);}
示例:
uint32_t gd25qxxReadID(void){ uint32_t Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0; /* Select the FLASH: Chip Select low */ SPI_FLASH_CS_LOW(); /* Send "RDID " instruction */ gd25qxxSendByte(0x9F); /* Read a byte from the FLASH */ Temp0 = gd25qxxSendByte(DUMMY_BYTE); /* Read a byte from the FLASH */ Temp1 = gd25qxxSendByte(DUMMY_BYTE); /* Read a byte from the FLASH */ Temp2 = gd25qxxSendByte(DUMMY_BYTE); /* Deselect the FLASH: Chip Select high */ SPI_FLASH_CS_HIGH(); Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2; return Temp;}
关键词:
-
STM32模拟SPI的程序
2023-07-31 -
手机上怎么查询父母养老保险?查询不到怎么办?
2023-07-31 -
专家解读:强降雨因何“滞留”京津冀
2023-07-31 -
福州沿街一餐厅发生爆炸,2名员工1名路人遭殃及
2023-07-31 -
浈江区多维度开展农贸市场整治 全方位守护群众舌尖上的安全
2023-07-31 -
美国芝加哥发生大规模枪击事件,致1死8伤
2023-07-31 -
2023年“京和号”援疆旅游专列发车
2023-07-31 -
人民币中间价报7.1305,上调33点
2023-07-31 -
蔚来换电站突破1600座
2023-07-31 -
复旦微电(688385.SH):存储产品在一季度维持了60%多的毛利率水平
2023-07-31 -
中央气象台7月31日06时继续发布暴雨红色预警
2023-07-31 -
棕红色的小雨靴像什么仿写_棕红
2023-07-31 -
电脑励志桌面语 电脑励志桌面
2023-07-31 -
京广深最新表态楼市 大力支持刚性和改善性住房需求
2023-07-30 -
专家:夏季玩水消暑谨防“红眼病”
2023-07-30 -
工伤鉴定需要去指定医院吗
2023-07-30 -
北京:周一部分地区或降为橙色预警,采取弹性工作方式或错峰上下班
2023-07-30 -
楼市稳了!北京深圳广州率先表态落实房地产松绑政策
2023-07-30 -
6-0!0-0!女足世界杯已有5队出线,亚洲新军惨败出局
2023-07-30 -
旅游企业要及早协商退订、退费
2023-07-30 -
德智体美劳谁提出的(德智体美的美)
2023-07-30 -
青春大运共联欢
2023-07-30 -
阿克:瓜帅希望球队和球员不断进步 踢左后卫需要覆盖的空间更大
2023-07-30 -
你迟迟不能成功,是因为没人告诉你上层社会运行的基本逻辑(一)1.
2023-07-30 -
阿里海外再添P11高管:王曦若出任零售技术负责人
2023-07-30 -
养殖+科研+休闲 山东烟台探索海洋牧场多元发展新模式
2023-07-30 -
这件作品被主办方取消了入展的资格原因是违反的原创,但很多观者认为
2023-07-30 -
意天空:挑战从底线后方2米处直接射门,阿莱格里战胜弗拉霍维奇
2023-07-30 -
一加怎么测电池损耗
2023-07-30 -
salute敬礼什么梗 salute什么意思
2023-07-30
-
守住网络直播的伦理底线
2021-12-16 -
石窟寺文化需要基于保护的“新开发”
2021-12-16 -
电影工作者不能远离生活
2021-12-16 -
提升隧道安全管控能力 智慧高速让司乘安心
2021-12-16 -
人民财评:提升消费体验,服务同样重要
2021-12-16 -
卫冕?突破?旗手?——武大靖留给北京冬奥会三大悬念
2021-12-16 -
新能源车险专属条款出台“三电”系统、起火燃烧等都可保
2021-12-16 -
美术作品中的党史 | 第97集《窗外》
2021-12-16 -
基金销售业务违规!浦发银行厦门分行等被厦门证监局责令改正
2021-12-16 -
保持稳定发展有支撑——从11月“成绩单”看中国经济走势
2021-12-16