【原创】ST LIS302DL MEMS 驱动for STM32F10X
phpskycn2014/06/16软件综合 IP:浙江
本帖最后由 phpskycn 于 2014-6-16 03:53 编辑

第一次做板子完事了,这里先感谢猴子提供的封装库和支持。
这份代码也是做板子过程中的产物,之前用google没有搜到现成的代码,so就放在这里了。
代码通过测试,环境:Keil 5.1 + STM32F103C8T6
ST LIS302DL是一款ST推出的三轴数字加速度传感器,支持的量程为0.5-7.5g(手册提供的值,非宣传值)。
lis302dl.png
(图片来自淘宝)
使用LGA14封装(需要吹焊),淘宝价格在3-5元左右。
由于我的STM32F4 Discovery开发板上也使用了这块传感器,所以这份代码是从STM32F4 Discovery的官方固件库移植的。
原代码使用STM32F4XX FW1.1固件库,经修改后支持STM32F10X FW3.5固件库。
由于STM32F407(Cortex M4内核) 保持了一定的代码级向下兼容能力,所以移植到STM32F10X(Cortex-M3内核)并不需要进行太多的修改和测试。

要注意的几点有:
1.F4和F1的GPIO使用的总线的区别。
2.F4和F1对于管脚复用的处理的差异。
XXXXIO_InitTypeDef结构体的差异

事实上,主要修改的就这一个函数:

一个简单的例子,初始化后读取数据到缓存即可

uint8_t X_Offset;
  uint8_t Y_Offset;
  uint8_t Z_Offset;

RCC_Configuration();
GPIO_Configuration();
GPIO_SetBits(GPIOB,GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
Delayms(1250);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
Delayms(200);
LCD_Init();
GPIO_SetBits(GPIOA,GPIO_Pin_10);
LCD_WriteString_en(1,1,\"STM32F103 \",0);


Accelerometer_MEMS_Test();

/*
  while (1)
  {
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_9);

Delayms(200);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
Delayms(200);
  }
*/


    LIS302DL_InitStruct.Power_Mode = LIS302DL_LOWPOWERMODE_ACTIVE;
    LIS302DL_InitStruct.Output_DataRate = LIS302DL_DATARATE_100;
    LIS302DL_InitStruct.Axes_Enable = LIS302DL_XYZ_ENABLE;
    LIS302DL_InitStruct.Full_Scale = LIS302DL_FULLSCALE_2_3;
    LIS302DL_XXXXXXXXXXXXXlf_Test = LIS302DL_SELFTEST_NORMAL;
    LIS302DL_Init(&LIS302DL_InitStruct);
    GPIO_ResetBits(GPIOB,GPIO_Pin_8);
  
    Delayms(200);
    GPIO_SetBits(GPIOB,GPIO_Pin_9);


    LIS302DL_FilterStruct.HighPassFilter_Data_Selection = LIS302DL_FILTEREDDATASELECTION_OUTPUTREGISTER;
    LIS302DL_FilterStruct.HighPassFilter_CutOff_Frequency = LIS302DL_HIGHPASSFILTER_LEVEL_1;
    LIS302DL_FilterStruct.HighPassFilter_Interrupt = LIS302DL_HIGHPASSFILTERINTERRUPT_1_2;
    LIS302DL_FilterConfig(&LIS302DL_FilterStruct);



while(1){

LIS302DL_Read(Buffer, LIS302DL_OUT_X_ADDR, 6);
X_Offset = Buffer[0];
Y_Offset = Buffer[2];
Z_Offset = Buffer[4];
LCD_WriteString_en(0,5,\"ST LIS302 MEMS\",0);
LCD_WriteString_en(0,0,\" X: \",0);

if( X_Offset <= 0x7f){
X_Offset *= 1.8;
LCD_WriteString_en(17,0,\"-\",0);
LCD_WriteNumber(26,0,X_Offset);

}
else{

X_Offset = ~X_Offset;
X_Offset *= 1.8;
LCD_WriteString_en(17,0,\"+\",0);
LCD_WriteNumber(26,0,X_Offset);

}

LCD_WriteString_en(0,2,\" Y: \",0);
if( Y_Offset <= 0x7f){

Y_Offset *= 1.8;
LCD_WriteString_en(17,2,\"-\",0);
LCD_WriteNumber(26,2,Y_Offset);

}
else{

Y_Offset = ~Y_Offset;
Y_Offset *= 1.8;
LCD_WriteString_en(17,2,\"+\",0);
LCD_WriteNumber(26,2,Y_Offset);

}

LCD_WriteString_en(0,4,\" Z: \",0);
if( Z_Offset <= 0x7f){
Z_Offset *= 1.8;
LCD_WriteString_en(17,4,\"-\",0);
LCD_WriteNumber(26,4,Z_Offset);

}
else{

Z_Offset = ~Z_Offset;
Z_Offset *= 1.8;
LCD_WriteString_en(17,4,\"+\",0);
LCD_WriteNumber(26,4 ,Z_Offset);

}
Delayms(50);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
Delayms(70);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);

LCD_Clear();
}

}



ST的代码可读性还是挺高的,要修改也很容易。

如果要改变量程请写入LIS302DL_CLICK_THSY_X_REG_ADDR 和 LIS302DL_CLICK_THSZ_REG_ADDR 两个寄存器,寄存器定义和地址在头文件中。
代码:

attachment icon lis302dl_lib.rar 9.78KB RAR 23次下载
数据手册:

attachment icon LIS302DL.attach 595.80KB ATTACH 25次下载
附上我的原理图,如果懒到需要什么都不改就用的话,不过这里占用了BOOT1不太好:
lis302sch.png
+200  科创币    ry7740kptv    2014/06/16 再接再励
来自:计算机科学 / 软件综合
3
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
phpskycn 作者
9年11个月前 IP:未同步
695657
2L征用,有可能上一些测试之类的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
go炮君
9年11个月前 IP:未同步
695758
代码 收了谢谢
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
phpskycn
专家 老干部 学者 机友 笔友
文章
402
回复
4591
学术分
8
2009/03/15注册,10天19时前活动

CV

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}