针对富士通的MB85RS2M驱动程序
软件模拟SPI
首先是初始化GPIO引脚,因为是软件模拟,所以GPIO不做要求,任意引脚即可。
#define BSP_MB85RS2M
#include "bsp_mb85rs2m.h"
/*
MX_SPI1_Init
------------------
Des:SPI初始化
NOTE:
REF:
------------------
Author:zx
Date:2023年05月11日
*/
void MX_SPI1_Init(void)
{
LL_GPIO_InitTypeDef GPIO_InitStruct = {
0};
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
/**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_5|LL_GPIO_PIN_7;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_4;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LL_GPIO_PIN_6;
GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
编写SPI的读字节程序
/*
SpiReadByte
------------------
Des:SPI读字节函数
NOTE:
REF:
------------------
Author:zx
Date:2023年05月11日
*/
static uint8_t SpiReadByte(void)
{
uint8_t u8Index, u8Rdata = 0;
FM_CLR_CLK;
for(u8Index=0; u8Index<8; u8Index++)
{
if(FM_STA_MISO)
{
u8Rdata |= 0x80 >> u8Index;
}
FM_SET_CLK;
FM_CLR_CLK;
}
return u8Rdata;
}
编写SPI写字节函数
/*
SpiWriteByte
------------------
Des:SPI写字节函数
NOTE:
REF:
------------------
Author:zx
Date:2023年05月11日
*/
void SpiWriteByte(uint8_t u8Wdata)
{
uint8_t u8Index;
FM_CLR_CLK;
for(u8Index = 0; u8Index < 8; u8Index++)
{
if(u8Wdata & (0x80 >> u8Index))
{
FM_SET_MOSI;
}
else
{
FM_CLR_MOSI;
}
FM_SET_CLK;
FM_CLR_CLK;
}
}
下面是读写内存的函数,是重点
写一条数据到FRAM指定地址
首先看FRAM的数据手册,数据手册上说需要先对WEL寄存器进行操作,在写数据之前,首先要发送写使能的命令;



可以看到,写数据前先要发送解锁命令后才能进行常规操作,在解锁之后发送写使能命令,然后发送要写入的地址和要写入的数据,所以程序如下:
/*
FM_Write_Datas
------------------
Des:Write memory data,在例程中时钟为18432000Hz条件下,写200字节的时间为6ms
NOTE:
REF:
------------------
Author:zx
Date:2023年05月11日
*/
uint8_t FM_Write_Datas(uint32_t u32Addr, uint8_t *pu8Buf, uint32_t u32PLen)

该文详细介绍了针对富士通MB85RS2M驱动器的SPI模拟和硬件实现,包括GPIO初始化、SPI读写字节函数、内存读写操作及设备ID读取。代码示例展示了如何进行SPI通信,如解锁、写使能、地址和数据传输等步骤,同时提到了硬件SPI的配置和时序注意事项。

355

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



