📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co., LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Litiantian
** Modified date: 2007-12-30
** Version:
** Descriptions: 在SmartARM2300教学实验工控开发平台上演示对优盘伴侣的操作。
**
**------------------------------------------------------------------------------------------------------
** Modified by: yangshiping
** Modified date: 2007-09-03
** Version:
** Descriptions: 对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by: Litiantian
********************************************************************************************************/
#include "config.h"
/*********************************************************************************************************
** 函数名称:UART3_IniDft
** 函数功能:按默认值初始化串口3的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
** 入口参数:无
** 出口参数:无
**********************************************************************************************************/
void UART3_IniDft(void)
{
uint32 Fdiv = 0;
PCONP |= 1 << 25; // 打开UART3
/* 初始化相关的I/O */
PINSEL9 = (0x03 << 24) | (0x03 << 26); // 设置P4.28和P4.29连接到UART3
/* 初始化串口通讯参数 */
U3LCR = 0x80; // 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
Fdiv = (Fpclk / 16) / 115200; // 设置波特率
U3DLM = Fdiv / 256;
U3DLL = Fdiv % 256;
U3LCR = 0x03; // 令DLAB位为0
U3FCR &= ~0x07; // 禁用FIFO
U3IER &= ~0x07; // 禁止UART产生中断
}
/*********************************************************************************************************
** 函数名称:UART3_SendChar
** 函数功能:通过串口3发送一个字符
** 入口参数:chr 要发送的字符
** 出口参数:无
*********************************************************************************************************/
void UART3_Sendchar(uint8 chr)
{
U3THR = chr;
while ((U3LSR & 0x20) == 0);
}
/*********************************************************************************************************
** 函数名称:UART3_SendStr
** 函数功能:通过串口3发送一个字符串
** 入口参数:str 要发送的字符串的指针
** 出口参数:无
*********************************************************************************************************/
void UART3_SendStr(char *str)
{
while (1)
{
if (*str == '\0')
{
break; // 遇到结束符则退出
}
UART3_Sendchar(*str);
str++;
}
}
/*********************************************************************************************************
** 函数名称:SysOp_Demo
** 函数功能:演示系统操作
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void SysOp_Demo(void)
{
char str[128];
uint32 UDisk_baud = 9600; // 该变量用于记录当前的从机波特率
SYSINF sysinf; // 定义一个系统信息控制块类型变量,用于存储系统信息
/* 1: 读取系统信息并通过串口3输出到上位机 */
while (TRUE != GetSysInfo(&sysinf)); // 读取系统信息
sprintf(str, "Hello! Baud of EasyUDisk is %4d bps,Date is 200%d-%02d-%02d,Time is %02d:%02d:%02d."
, UDisk_baud, sysinf.Year, sysinf.Month, sysinf.Dom, sysinf.Hour, sysinf.Min, sysinf.Sec);
UART3_SendStr(str);
UART3_SendStr("\r\n");
sprintf(str,"%d UDisk has been inserted.", sysinf.DiskIn);
UART3_SendStr(str);
UART3_SendStr("\r\n");
/* 2: 重新设定系统信息 */
sysinf.Baud = 7; // 设从机的波特率为115200
sysinf.Year = 7;
sysinf.Month = 7;
sysinf.Dom = 1;
sysinf.Hour = 10;
sysinf.Min = 40;
sysinf.Sec = 0;
while (TRUE != SetUDiskSysInfo(&sysinf));
UART0Init(115200); // 由于从机的波特率改变,所以主机也需调整UART0的波特率
UDisk_baud = 115200; // 当前从机波特率信息更新
/* 3: 再次读取系统信息并通过串口3输出到上位机 */
while (TRUE != GetSysInfo(&sysinf));
sprintf(str, "Hello! Baud of EasyUDisk is %4d bps,Date is 200%d-%02d-%02d,Time is %02d:%02d:%02d."
, UDisk_baud, sysinf.Year, sysinf.Month, sysinf.Dom, sysinf.Hour, sysinf.Min, sysinf.Sec);
UART3_SendStr(str);
UART3_SendStr("\r\n");
sprintf(str,"%d UDisk has been inserted.",sysinf.DiskIn);
UART3_SendStr(str);
UART3_SendStr("\r\n");
}
uint8 const WritFileData[] =
"\r\n******************Copyright (c) 广州致远电子有限公司***********************\r\n\
\r\n\
优盘作为数据的载体目前已广泛应用于嵌入式行业,而某些电子产品在国家标准中已成了\r\n\
强制性的要求。在嵌入式的电子产品中实现对优盘文件的读写,成了许多厂家的技术攻关的难\r\n\
题。优盘伴侣EasyUDisk读写优盘模块可以轻易解决以上问题,它是低端单片机操作优盘的最\r\n\
佳伴侣。\r\n\
EasyUDisk模块采用PHILIPS公司工业级USB主控芯片ISP1160和ARM7微处理器LPC2132,整个\r\n\
模块以工业级标准设计。模块提供了通用RS-232串口与用户系统连接,使普通的单片机也可以\r\n\
轻易实现对优盘的操作。\r\n\
EasyUDisk模块适用于仪器仪表、门禁系统、汽车黑匣子和税控机等对存贮速度要求不高\r\n\
的设备中使用。\r\n\
\r\n\
\r\n*********************************嵌入式系统事业部************************************\r\n";
/*********************************************************************************************************
** 函数名称:FileOp_Demo
** 函数功能:演示文件操作
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void FileOp_Demo(void)
{
FileCB *fileCB = NULL;
char RdFileDat[sizeof(WritFileData)];
SYSINF sysinf; // 定义一个系统信息控制块类型变量,用于存储系统信息
/* 查询优盘是否插入,当前是否有文件打开 */
while (0 == sysinf.DiskIn) // 等待优盘插入
{
GetSysInfo(&sysinf);
if (sysinf.FH.fh != HANDLE_AVAILABLE) // 若EasyUDisk功能模块上已有文件打开
{
FileClose(); // 先将已打开的文件关闭。
}
}
/* 在当前目录下建立一个文件并保存 */
fileCB = FileOpen("A:\\演示程序.txt");
FileClose();
/* 向该文件写入数据 */
fileCB = FileOpen("A:\\演示程序.txt");
if (NULL != fileCB)
{
FileSeek(fileCB, 0, SEEK_END); // 将读写指针移到文件末尾
FileWrite((uint8*)WritFileData, sizeof(WritFileData), fileCB); // 写数据入文件
}
FileClose(); // 保存写入的信息
/* 将文件中的数据,读到上位机 */
fileCB = FileOpen("A:\\演示程序.txt");
if (NULL != fileCB)
{
FileSeek(fileCB, -sizeof(WritFileData), SEEK_END); // 将读写指针移到文件头
FileRead((uint8*)RdFileDat, sizeof(WritFileData), fileCB); // 将文件中的数据读到缓存
}
UART3_SendStr(RdFileDat);
/* 文件操作结束,关闭文件 */
FileClose();
RemoveFile("A:\\演示程序.txt");
}
/*********************************************************************************************************
** 函数名称:main
** 函数功能:在SmartARM2300教学实验工控开发平台上演示对优盘伴侣的操作。
** 入口参数:无
** 出口参数:返回0则表示程序出错。
** 调试说明:1、需用杜邦线分别连接好P0.2、P0.3和MTXD与MRXD;此外还要将UDisk功能模块与SmartARM2300工控开发平台上的串口CON13相连;
** 2、确保优盘插入后,EasyUDisk功能模块上的指示灯一直为绿,此时才可进行调试.否则,必须复位功能模块,再插拔优盘;
** 3、需用杜邦线分别连接好P4.28、P4.29和TXD0、RXD0;
** 4、需用串口线将开发SmartARM2300工控开发平台的CON6和pc的串口相连;
** 5、需打开串口调试软件EasyARM.exe。
*********************************************************************************************************/
int main(void)
{
/* 初始化 */
UART3_IniDft();
UDiskIni(9600); // 初始化主机UART0波特率为9600bps,若从机波特率和主机波特率不一致,从机需重新上电复位,优盘必须待从机的指示灯为绿色闪亮时方可插入
/* 系统操作演示 */
SysOp_Demo();
/* 目录操作演示 */
MakeDir("ZLGARM"); // 创建目录
MakeDir("Demo"); // 在根目录下建立一个目录Demo
ChangeDir("A:\\ZLGARM"); // 当前目录由根目录切换到目录ZLGARM
MakeDir("Demo"); // 在ZLGARM下建立一个目录Demo
RemoveDir("A:\\ZLGARM\\Demo"); // 用户在建立目录Demo后,可将此语句的注释取消再执行程序,观察是哪一个目录Demo是否被删除
/* 文件操作演示 */
FileOp_Demo();
while (1);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -