STM32中使用MMA7660重力加速度传感器
来源:互联网 发布时间:2018-08-02 分享至微信


最近在项目中要用到飞思卡尔的MMA7660这一款传感器,我在STM32中使用的是模拟I2C来读写它的寄存器,闲话不多说,代码如下:


1、IO引脚配置和模拟I2C的方法




/********************(C)COPYRIGHT2015ASTO**************************


@*文件名:mma7660.c


@*描述:飞思卡尔的MMA7660系列重力加速度传感器


@*开发平台:STM32F103CBT6系列处理器


@*通信方式:I2C


@*硬件连接:------------------------------


*|PB1:中断引脚|


*|PB10:SCL数据线|


*|PB11:SDA数据线|


*------------------------------


@*库版本:ST3.5.0


@*开发者:POWER


************************************************************************/



#include"stm32f10x.h"


#include"mma7660.h"


#include"delay.h"




/*


*=========================================================


*函数功能:MMA7660中断向量表配置


*参数:无


*


*函数返回值:无


*=========================================================


*/


staticvoidMMA7660_NVIC_Config(void)


{


NVIC_InitTypeDefNVIC_InitStructure;



/*EnabletheEXTI1Interrupt*/


NVIC_InitStructure.NVIC_IRQChannel=MMA7660_INT_IRQ;//中断通道


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级


NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//次优先级


NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//通道中断使能


NVIC_Init(&NVIC_InitStructure);//初始化中断


}



/*


*=========================================================


*函数功能:MMA7660中断线配置


*参数:无


*


*函数返回值:无


*=========================================================


*/


staticvoidMMA7660_ExtiInit(void)


{


EXTI_InitTypeDefEXTI_InitStructure;


MMA7660_NVIC_Config();


RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);



//配置MMA7660模块发生相应的事件后中断配置


GPIO_EXTILineConfig(MMA7660_INT_PORT_SRC,MMA7660_INT_SOURCE);


EXTI_InitStructure.EXTI_Line=MMA7660_INT_LINE;//中断线


EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//使用中断方式触发模式(另外还有事件方式触发模式)


EXTI_InitStructure.EXTI_Trigger=MMA7660_INT_MODE;//中断信号触发边沿


EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中断线使能


EXTI_Init(&EXTI_InitStructure);//初始化中断


}



/*


**********************************************************


*


*IIC总线模拟程序


*


**********************************************************


*/



/*


*=========================================================


*函数功能:MMA7660端口状态配置


*参数:无


*


*函数返回值:无


*=========================================================


*/


voidMMA7660_Init(void)


{


GPIO_InitTypeDefGPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);



//中断引脚配置


GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入


GPIO_Init(GPIOB,&GPIO_InitStructure);//选择B端口



//SCL数据线配置


GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//普通推挽输出


GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速率50MHz


GPIO_Init(GPIOB,&GPIO_InitStructure);//选择B端口



//SDA数据线配置


GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;//开漏输出


GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速率50MHz


GPIO_Init(GPIOB,&GPIO_InitStructure);//选择B端口



MMA7660_ExtiInit();//中断配置



MMA7660_Begin();//MMA7660寄存器配置


}




/*


*=========================================================


*函数功能:MMA7660的SDA数据线配置,这里作为输出用


*参数:无


*


*函数返回值:无


*=========================================================


*/


voidMMA_SDA_IOOUT(void)


{


GPIO_InitTypeDefGPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);



GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;


GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;//开漏输出


GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速率50MHz


GPIO_Init(GPIOB,&GPIO_InitStructure);//选择B端口


}




/*


*=========================================================


*函数功能:MMA7660的SDA数据线配置,这里作为输入用


*参数:无


*


*函数返回值:无


*==================


[ 新闻来源:互联网,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!