需求描述
基于寄存器操作,使用软件模拟SPI协议,完成读写FLASH。
硬件电路设计

寄存器代码书写
main.c
#include "usart1.h"
#include "string.h"
#include <stdio.h>
#include "m24c02.h"
#include "soft_spi.h"
#include "W25Q32.h"
int main(void){
Usart1_Init();
W25Q32_Init();
uint8_t buffer[1001] = {0};
W25Q32_EraseSetor(0x00,0x00);
W25Q32_PageWrite(0x00,0x00,0x00,0x00,"abcde",5);
W25Q32_ReadData(0x00,0x00,0x00,0x00,buffer,1000);
printf("%s\n",buffer);
while (1)
{
}
}
soft_spi.h
#ifndef __SOFT_SPI_H__
#define __SOFT_SPI_H__
#include "stm32f10x.h"
#define SCK_HIGH (GPIOA->ODR |= GPIO_ODR_ODR5)
#define SCK_LOW (GPIOA->ODR &= ~GPIO_ODR_ODR5)
#define MOSI_HIGH (GPIOA->ODR |= GPIO_ODR_ODR7)
#define MOSI_LOW (GPIOA->ODR &= ~GPIO_ODR_ODR7)
#define CS_HIGH (GPIOA->ODR |= GPIO_ODR_ODR13)
#define CS_LOW (GPIOA->ODR &= ~GPIO_ODR_ODR13)
#define MISO_READ (GPIOA->IDR & GPIO_IDR_IDR6)
void SPI_Init(void);
void SPI_Start(void);
void SPI_Stop(void);
uint8_t SPI_SwapByte(uint8_t byte);
#endif /* __SOFT_SPI_H__ */
soft_spi.c
#include "soft_spi.h"
void SPI_Init(void)
{
// 1. GPIOA
// 1.1 先放时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
/

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



