STM32_LCD_SD卡存储串口接收到的数据
单片机源程序如下:
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "usart2.h"
- #include "lcd.h"
- #include "malloc.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "flash.h"
- #include "mmc_sd.h"
- #include "text.h"
- #define FILE_MAX_SIZE 512
- int main() //主函数
- {
- u8 font_updata;
- u8 rxlen;
- u16 i;
- u8 *write_buf=0;
- //u8 *read_buf=0;
- FIL file; //文件对象
- FRESULT res;
- u16 pointer=0;
- Stm32_Clock_Init(9);//系统时钟设置
- delay_init(72); //延时初始化
- uart_init(72,9600); //串口1初始化
- uart2_init(36,9600);//串口2初始化
- LCD_Init(); //初始化LCD
- LCD_Display_Dir(0); //设置LCD显示方向 0竖屏 1横屏
- SPI_Flash_Init(); //初始化Flash
- if(SD_Initialize())
- {
- LCD_ShowString(0,0,240,16,16,"SD CARD ERROR");
- }
- mem_init(SRAMIN); //初始化内部内存池
- exfuns_init(); //为fatfs相关变量申请内存
- f_mount(0,fs[0]); //挂载SD卡
- f_mount(1,fs[1]); //挂载FLASH
- if(font_init()) //检查字库
- {
- LCD_ShowString(0,0,240,16,16,"FONT ERROR");
- LCD_ShowString(0,16,240,16,16,"UPDATA FONT FROM SD CARD...");
- font_updata=update_font(20,110,16,0);//从SD卡更新
- while(font_updata)//更新失败
- {
- LCD_ShowString(0,32,240,16,16,"UPDATA FONT ERROR");
- }
- LCD_ShowString(0,32,240,16,16,"UPDATA FONT SUCCESS");
- }
- Show_Str(0,0,240,16,"程序正常启动",16,0);
- while(1)
- {
- if(USART2_RX_STA&0X8000)//串口2收到数据了
- {
- Show_Str(0,0,240,16,"串口收到数据了",16,0);
- rxlen=USART2_RX_STA&0X7FFF; //得到数据长度
- write_buf=mymalloc(SRAMIN,FILE_MAX_SIZE); //申请FILE_MAX_SIZE字节的空间
-
- for(i=0;i<rxlen;i++)
- {
- write_buf[i]=USART2_RX_BUF[i];
- }
- for(i=rxlen;i<FILE_MAX_SIZE;i++)
- {
- write_buf[i]=' ';
- }
- LCD_Clear(WHITE);
- Show_Str(0,16,240,16,write_buf,16,0);
- //打开文件,如果文件不存在,则创建一个新文件;用此种方式,可以用f_lseek 在文件后追加数据
- //(读写模式可同时生效)
- res=f_open(&file, "0:/yiyi.txt", FA_OPEN_ALWAYS | FA_WRITE);
- switch(res)
- {
- case FR_OK:
- Show_Str(0,0,240,16,"磁盘正常",16,0);
- break;
- case FR_INVALID_DRIVE://驱动器号无效
- Show_Str(0,0,240,16,"驱动器号无效",16,0);
- break;
- case FR_NOT_READY://由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作
- Show_Str(0,0,240,16,"磁盘驱动器无法工作",16,0);
- break;
- case FR_DISK_ERR://由于底层磁盘I/O接口函数中的一个错误,而导致该函数失败
- Show_Str(0,0,240,16,"底层磁盘I/O错误",16,0);
- break;
- case FR_NO_PATH: //找不到该路径
- Show_Str(0,0,240,16,"找不到该路径",16,0);
- break;
- case FR_INVALID_NAME: //文件名无效
- Show_Str(0,0,240,16,"文件名无效",16,0);
- break;
- case FR_NO_FILE: //找不到该文件
- Show_Str(0,0,240,16,"找不到该文件",16,0);
- break;
- case FR_EXIST: //文件已存在
- Show_Str(0,0,240,16,"文件已存在",16,0);
- break;
- default: //其他的为Disk error
- Show_Str(0,0,240,16,"其它Disk error",16,0);
- break;
- }
- pointer=file.fsize; //获得文件大小
- res=f_lseek(&file,pointer);//移动文件指针
- res=f_write(&file,write_buf,rxlen,&br);//向文件内写入字符串
- res=f_close(&file); //关闭打开的文件
- myfree(SRAMIN,write_buf);
- USART2_RX_STA=0; //启动下一次接收
- }
- }
- }
复制代码
所有资料51hei提供下载:
STM32_LCD_SD卡存储串口接收到的数据.rar
(140.93 KB, 下载次数: 55)
|