可以指定编译环境,定制库吗?

现在我使用KEIL MDK 4.12+STM32(Cortex-M3) 看了一下,没有专门的库。能够提供吗?

网站上有提供KEIL3 Cortex-M3的库文件, 你可以试一下 看不可以使用, 如果是CH375 下载CH375LIB CH375LIB\ARM32\FILELIBM_CX 如果是CH374 下载CH374LIB CH374LIB\ARM32\LIBM_CX


为何我编译始终找不到FILE_DATA_BUF的定义啊。 参考ARM32下的exam1和exam6中的例子写了ch375hfm.c也包含了filelibm_CX.lib 急!在线等 ps:我的ch375hfm.c

#include #include //#include "ch375.h"

#include "stm32f10x.h"

#define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为"外部子程序",1为"内部复制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */

/* 单片机的RAM有限,其中CH375子程序用512字节,剩余RAM部分可以用于文件读写缓冲 */ #define DISK_BASE_BUF_LEN 2048 /* 默认的磁盘数据缓冲区大小为512字节,建议选择为2048甚至4096以支持某些大扇区的U盘,为0则禁止在.H文件中定义缓冲区并由应用程序在pDISK_BASE_BUF中指定 */ #define FILE_DATA_BUF_LEN 0x0800 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */ /* 如果准备使用双缓冲区交替读写,那么不要定义FILE_DATA_BUF_LEN,而是在参数中指定缓冲区起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */

/* PA.1, CH375的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态 */

#define CH375_INT_WIRE GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)

#define NO_DEFAULT_CH375_F_ENUM 1 /* 未调用CH375FileEnumer程序故禁止以节约代码 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未调用CH375FileQuery程序故禁止以节约代码 */

#include "ch375hfm.h"

//UINT8 FILE_DATA_BUF[FILE_DATA_BUF_LEN];

void mDelay1uS( ) /* 至少延时1uS,根据单片机主频调整 */ { UINT32 i; for ( i = 0xff; i != 0; i -- ); }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH375_Init();

}

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { CH375_Wr(0x100|mCmd); }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { CH375_Wr(mData); }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mData=CH375_Rd(); return( mData ); }

/* 延时指定毫秒时间,根据单片机主频调整,不精确 */ void mDelaymS( UINT8 ms ) { delay(ms); }

/* 检查操作状态,如果错误则显示错误代码并停机 */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 显示错误 */ while ( 1 ) { mDelaymS( 100 ); } }

另: 例子中的main函数我放置在另外一个main.c文件中了。


FILE_DATA_BUF在头文件中定义的。可能是其他的C文件没有声明导致报错的。你看一下ch375hfm.h这里面有定义。你根据自己的工程修改一下


我感觉是

/* 该头文件可以为CH375子程序库分配必要的I/O及内存资源,并产生必要的与硬件有关的目标代码, 如果该文件是被工程项目的多个源程序包含作为头文件,那么应该只允许一个头文件分配资源和产生代码, 除此之外的头文件应该被事先定义CH375HF_NO_CODE,从而禁止该头文件产生重复的目标代码,例如: #define CH375HF_NO_CODE 1 #include CH375HF?.H */ #ifdef CH375HF_NO_CODE

当我仿照示例把main和必要的xReadCH375xxx等命令放到一个c文件中,可以运行。

放到两个文件 ch375hfm.c 包含主程序要实现的命令 xReadCH375xxx等 代码包括 #include "ch375hfm.h"

main.c 包含测试的程序 包括如下代码 #define CH375HF_NO_CODE 1 #include "ch375hfm.h"

就运行不对。

这个问题是不是太低级了?也没找到答案。


只有登录才能回复,可以选择微信账号登录