⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mian.cpp

📁 用Visual C++语言编写的SD卡与PC机通讯的main函数。
💻 CPP
字号:
main.cpp
#include "config.h"
#include "string.h"
#include "uart.h"							/* 串口操作相关函数 */
#include "sdconfig.h"
#include "sddriver.h"						/* SD卡操作的相关函数 */

#define CMD_SD_INIT		   0x00				/* SD卡初始化卡命令  */
#define CMD_SD_READ    	   0x01				/* SD卡读命令        */
#define CMD_SD_WRITE   	   0x02				/* SD卡写命令        */
#define CMD_SD_ERASE	   0x03				/* SD卡擦除命令      */

#define CMD_DATA_TRANS	   0x04				/* 将sd_buf中的数据发送到PC机 */
#define CMD_DATA_RECV	   0x05				/* 接收来自串口的数据,并放入sd_buf中 
 
/* SD卡读写缓冲区,比SD卡一个块大8字节 */  
uint8 sd_buf[520];

int main (void)
{
	uint32 bufaddr;														
	uint32 blockaddr;
	uint32 blocknum;
	
	Uart_Initialize(115200);										/* 初始化串口 */
	
    while(1)                            						/* 等待串口中断 */
    { 
    	if(rcv_new == 1)									/* 如果串口收到数据 */
    	{ 
    		switch(rcv_buf[0])
    		{
    			case CMD_SD_INIT: rcv_buf[1] = SD_Initialize();	/* 初始化SD卡 */
    			break; 
    		    case CMD_SD_READ:
    				 blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) +/* 计算块地址 
    							 (rcv_buf[3] << 8) + rcv_buf[4];
    				 rcv_buf[1] = SD_ReadBlock(blockaddr, sd_buf);/* SD卡单块读 */ 			
    			break;
    		 	    		
    			case CMD_SD_WRITE:	 
    				 blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) + 
    							 (rcv_buf[3] << 8) + rcv_buf[4];
    				 rcv_buf[1] = SD_WriteBlock(blockaddr, sd_buf); /* SD卡单块写 */
    			break;
    			
    			case CMD_SD_ERASE:	 
    				 blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) + 
    							 (rcv_buf[3] << 8) + rcv_buf[4];
    				 blocknum  = (rcv_buf[5] << 16) + (rcv_buf[6] << 8) +
    				 			 (rcv_buf[7]);
    				 rcv_buf[1] = SD_EraseBlock(blockaddr, blocknum);	/*SD 卡擦除 */
    			break;
    			case CMD_DATA_RECV:	 
    				 bufaddr = (rcv_buf[1] << 8) + rcv_buf[2];	/* 计算缓冲区地址 */
    				 memcpy(sd_buf + bufaddr, &rcv_buf[3], 5); /*收到数据放入sd_buf */
    			break;
    			case CMD_DATA_TRANS: 
    				 bufaddr = (rcv_buf[1] << 8) + rcv_buf[2];		/*计算缓冲区地址 */ 
    				 memcpy(&rcv_buf[1], sd_buf + bufaddr, 7);/ sd_buf数据放入rcv_buf     			break;  							
    	
    			default: break;
    		}
    		    	    UART0_SendBuf();					/* 发送 rcv_buf */  		  		
        	rcv_new = 0;  									/* 接收标志清0  */
     	}
	}
   
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -