我们需要加工轨迹时,从U盘中读取NC的数据来进行执行,NC为数控的简称,里面保存的是G代码。G代码是数控程序中的指令。一般都称为G指令。使用G代码可以实现快速定位、逆圆插补、顺圆插补、中间点圆弧插补、半径编程、跳转加工。
在BSP_C中,有BSP_Init函数,USB部分的初始化如下:
USB_System();
Set_USBClock();
USB_Interrupts_Config();
USB_Init();
这个是我们使用U盘时候的所有设置了,其中USB_System包括两步:
USB_Disconnect_Config,定义在USB_CONFIG.C中,它是一个USB弹出控制引脚,引脚为:
#define USB_DISCONNECT GPIOG
#define USB_DISCONNECT_PIN GPIO_Pin_8
上面的函数配置USB_C引脚为推挽输出,电路如下图。
MAL_Config,里面调用了一个MAL_Init,这个是媒体接口初始化函数,其中
MAL_Init返回1,则表示FAIL,如果,如果入口参数是0则表示SPIFLASH_disk_initialize_USB
在SPI_FLASH.h文件中,有下面的三个函数针对USB口功能
extern int32_t SPIFLASH_disk_initialize_USB(void);
extern void SPI_FLASH_Write_Sector_512bytes_USB(uint32_t nSector_512, uint8_t* pBuffer, uint16_t Transfer_Length);
extern void SPI_FLASH_Read_Sector_512bytes_USB(uint32_t nSector_512, uint8_t* pBuffer, uint16_t Transfer_Length);
先看USB盘的初始化:在__SPI2_INIT_H中,定义了如下:
SPI_FLASH_SPI_Init,我们可以看出,程序中将USB转移到了电路板上的SPI
用到了5个信号:
#define SPI_FLASH_SCS GPIO_Pin_12 // out//PB12
#define SPI_FLASH_SCLK GPIO_Pin_13 // out//PB13
#define SPI_FLASH_MISO GPIO_Pin_14 // in//PB14
#define SPI_FLASH_MOSI GPIO_Pin_15 // out//PB15
#define SPI_FLASH_WP GPIO_Pin_8 // out //PD8
GPIO的时钟和SPI2的时钟打开以后,配置完引脚,则可以配置SPI2
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex; //全双工通信,速度快
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//SPI主机
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b; //8位数据
SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low; //参考芯片手册
SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;//参考芯片手册
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft; //软件片选
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4; //倍频
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位在前
SPI_InitStructure.SPI_CRCPolynomial=7; //校验
SPI_Init(SPI2,&SPI_InitStructure);
SPI_Cmd(SPI2,ENABLE); //开启SPI2
我们实际在调用NC格式的文件的时候,使用到了:
fres = f_getfree("", &fre_clust, &fs1);// 查看内存剩余容量
也就是说,我们需要先了解FATFS系统。