0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ADXL345 与 PT32L007 IIC通讯源代码分享

Rickluo 来源:Rickluo 作者:Rickluo 2024-06-07 10:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

#include "PT32x007x.h"
#include "string.h"
#include "filter.h"

#include "gpio_i2c.h"

#define READ_ADDR 0xA7
#define DEVICE_ADDR 0xA6

u8 arry_write[8]={0x0B,0x08,0x08,0x80,0x00,0x00,0x00};
u8 arry_read[7]={0};

float anglex = 0.0 ;
float angley = 0.0 ;
float anglez = 0.0 ;

void Software_Delay(u32 val)//延时函数
{
while(val)
{
val--;
}
}
/*******************************************************************************
*Function: UART_GPIO_Config
*Description: 配置UART引脚
*Input: 无
*Return: 无

*Others:
该函数负责使能UART模块相关引脚
*******************************************************************************/
void UART_GPIO_Config(void)
{
/* 配置UART管脚的复用功能 */
GPIO_DigitalRemapConfig(AFIOD, GPIO_Pin_5, AFIO_AF_0,ENABLE); //PD5 TX0
GPIO_DigitalRemapConfig(AFIOD, GPIO_Pin_6, AFIO_AF_0,ENABLE); //PD6 RX0
}

/*******************************************************************************
*Function: UART_Mode_Config
*Description: 配置UART
*Input: 无
*Return: 无
*Others:
该函数负责初始化UART模块的工作及其工作方式
*******************************************************************************/
void UART_Mode_Config(void)
{
UART_InitTypeDef UART_InitStruct;

/*初始化UART0*/
UART_InitStruct.UART_BaudRate = 9600;
UART_InitStruct.UART_WordLengthAndParity=UART_WordLengthAndParity_8D;
UART_InitStruct.UART_StopBitLength=UART_StopBitLength_1;
UART_InitStruct.UART_ParityMode=UART_ParityMode_Even;
UART_InitStruct.UART_Receiver=UART_Receiver_Enable;
UART_InitStruct.UART_LoopbackMode=UART_LoopbackMode_Disable;

UART_Init(UART0, &UART_InitStruct);

/*开启UART0的收发功能*/
UART_Cmd(UART0, ENABLE);
}

static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;


/* 配置USART为中断源 */
NVIC_InitStructure.NVIC_IRQChannel = UART0_IRQn;
/* 优先级*/
NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
/* 使能中断 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);

UART_ITConfig(UART0, UART_IT_RXNEI, ENABLE); // 使能串口接收中断
//---------------------------------
// 使能串口
UART_Cmd(UART0, ENABLE);
}

/*******************************************************************************
*Function: UART_Driver
*Description: UART模块驱动函数
*Input: 无
*Return: 无
*Others:
*******************************************************************************/
void UART_Driver(void)
{
UART_GPIO_Config();
UART_Mode_Config();
//
NVIC_Configuration() ;//串口接受
}

void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; //选择要控制的GPIO引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OutPP; //设置引脚模式为通用推挽输出
GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up; //无偏置
GPIO_Init(GPIOC, &GPIO_InitStructure); //调用库函数,初始化GPIO

// /* 配置I2C管脚的复用功能 */
// GPIO_DigitalRemapConfig(AFIOB, GPIO_Pin_5, AFIO_AF_0,ENABLE); //PB5 I2C SDA
// GPIO_DigitalRemapConfig(AFIOB, GPIO_Pin_4, AFIO_AF_0,ENABLE); //PB4 I2C SCL
}
void I2C_Driver(void)
{
I2C_InitTypeDef I2C_InitStruct;
I2C_InitStruct.I2C_Acknowledge = I2C_Acknowledge_Disable;
I2C_InitStruct.I2C_Broadcast = I2C_Broadcast_Disable;
I2C_InitStruct.I2C_OwnAddress = 0x00;
I2C_InitStruct.I2C_Prescaler = 640-1;
I2C_Init(I2C,&I2C_InitStruct);
}


int main (void)
{
uint32_t time = 0 ;
uint16_t i=0;

UART_Driver();
I2C_GPIO_Config();
// I2C_Driver();

printf("start......rn");
adxl_i2c_write(0x31, 0x0B) ; //Software_Delay(100000) ;
adxl_i2c_write(0x2c, 0x08) ; //Software_Delay(100000) ;
adxl_i2c_write(0x2d, 0x08) ; //Software_Delay(100000) ;
adxl_i2c_write(0x2e, 0x80) ; //Software_Delay(100000) ;
adxl_i2c_write(0x1E, 0x00) ; //Software_Delay(100000) ;
adxl_i2c_write(0x1F, 0x00) ; //Software_Delay(100000) ;
adxl_i2c_write(0x20, 0x05) ; //Software_Delay(100000) ;

//////// I2C_EE_Write(0xc0, 0x38, 1);Software_Delay(100000) ;
printf("device id=0x%xn", adxl_i2c_read(0x00)) ;


//I2C_EE_Read(arry_read, 0x20, DEVICE_ADDR, 1);
sc7a20_filter_init() ; //初始化滤波
while(1)
{
time++;

if(time%5000==0)
{
ADXL345_ReadDates(&anglex, &angley, &anglez) ;
printf("x=%.2f y=%.2f z=%.2fn", anglex, angley , anglez) ;
}

// Software_Delay(100000) ;
}

}

#include "filter.h"
#include "math.h"
#include "string.h"
#include "stdlib.h"

extern short x ;
extern short y ;
extern short z ;

typedef struct FilterChannelTag{
int16_t sample_l;
int16_t sample_h;

int16_t flag_l;
int16_t flag_h;

} FilterChannel;

typedef struct Silan_core_channel_s{
int16_t filter_param_l;
int16_t filter_param_h;
int16_t filter_threhold;
FilterChannel sl_channel[3];
} Silan_core_channel;

Silan_core_channel core_channel;

void sc7a20_filter_init(void)
{
int16_t j = 0;

core_channel.filter_param_l = 4;
core_channel.filter_param_h = 16;
core_channel.filter_threhold = 50; //4G scale: 25; 2G scale: 50

for(j = 0; j < 3; j++)
{
core_channel.sl_channel[j].sample_l = 0;
core_channel.sl_channel[j].sample_h = 0;
core_channel.sl_channel[j].flag_l = 0;
core_channel.sl_channel[j].flag_h = 0;
}

}


static int16_t filter_average(int16_t preAve, int16_t sample, int16_t Filter_num, int16_t * flag)
{
if (*flag == 0)
{
preAve = sample;
*flag = 1;
}

return preAve + (sample - preAve) / Filter_num;
}

static int16_t silan_filter_process(FilterChannel* fac, int16_t sample)
{
if(fac == NULL)
{
return 0;
}

fac->sample_l = filter_average(fac->sample_l, sample, core_channel.filter_param_l, &fac->flag_l);
fac->sample_h = filter_average(fac->sample_h, sample, core_channel.filter_param_h, &fac->flag_h);
if (abs(fac->sample_l - fac->sample_h) > core_channel.filter_threhold)
{
fac->sample_h = fac->sample_l;
}

return fac->sample_h;
}

void filter_base_dates(void)
{
x = silan_filter_process(&core_channel.sl_channel[0], x);
y = silan_filter_process(&core_channel.sl_channel[1], y);
z = silan_filter_process(&core_channel.sl_channel[2], z);
}

wKgaomZiamiAYCJyAAQMvBfGYJw069.png


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通讯
    +关注

    关注

    9

    文章

    953

    浏览量

    36702
  • IIC
    IIC
    +关注

    关注

    11

    文章

    311

    浏览量

    40834
  • 源代码
    +关注

    关注

    96

    文章

    2954

    浏览量

    70882
  • ADXL345
    +关注

    关注

    14

    文章

    73

    浏览量

    35651
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在“ADXL345”上切换 I2C 和 SPI?

    Category: Datasheet/Specs Product Number: ADXL345 我有一个基本问题。 据我了解,ADXL345通过 CS 控制 SPI 和 I2C 两个接口。 那么如何在这两个接口之间可靠地切换呢?还有其他规格,例如时间,我需要
    发表于 05-28 07:31

    【瑞萨RA2L1入门学习】+ IIC驱动OLED

    OLED测试: 设置IIC模块,使用P400和P401作为IIC接线,设置为7位地址模式,地址设置为0x3C,设置回调函数名,如图: 关键代码是使用IIC写数据和命令到OLED:
    发表于 05-03 09:28

    PT32L031系列32位微控制器

    PT32L031系列32位微控制器PT32L031系列是澎湃微电子(PAI-IC)推出的32位微控制器,搭载 ARM Cortex-M0内核,具有高性能与超低功耗,支持Sleep/DeepSleep
    发表于 04-21 09:07

    探索STEVAL - CBL007V1:LNB电源供应演示板的卓越性能

    STMicroelectronics推出的STEVAL - CBL007V1演示板,它基于符合DiSEqC 1.X标准的LNBH23L,为LNB的电源供应和接口设计提供了一个出色的解决方案。 文件下载
    的头像 发表于 04-16 14:30 157次阅读

    PT32L005&amp;F005系列32位微控制器

    PT32L005&F005系列32位微控制器PT32L005&F005是澎湃微电子(PAI-IC) 推出的两款 32 位微控制器,两款芯片均基于 ARM
    发表于 03-05 08:51

    PT32Y003/X003系列32位通用微控制器

    温度 −40 ℃ ~ +85 ℃存储与保密l 16 KB 片上 MTP Flash(可反复擦写)、2 KB SRAM、128 B EEPROMl 内置硬件 CRC、独立看门狗、多级别代码保护,ESD
    发表于 01-04 09:28

    变频器通讯代码地址的含义

    变频器作为工业自动化领域的核心设备,其通讯功能是实现远程监控和系统集成的关键技术。通讯代码地址作为变频器与上位机(如PLC、HMI或计算机)进行数据交互的"语言密码",其含义理解直接影响设备调试效率
    的头像 发表于 12-11 07:37 1496次阅读
    变频器<b class='flag-5'>通讯</b><b class='flag-5'>代码</b>地址的含义

    【瑞萨RA6E2】硬件IIC驱动九轴传感器与OLED显示

    一、项目概述 1.1 项目简介 本次试用基于瑞萨RA6E2开发板,通过硬件IIC协议驱动GY-85九轴传感器模块(包含ITG3205陀螺仪、ADXL345加速度计和QMC5883P磁力计),并在
    发表于 11-27 02:18

    PT32L007x系列微控制器

    PT32L007x系列微控制器是厦门澎湃微电子有限公司推出的基于ARM Cortex-M0内核的32位超低功耗高性能MCU。PT32L007x系列MCU以“超低功耗 + 高集成度 + 宽压供电”为
    发表于 11-19 09:21

    ADXL357的替代选择

    数字输出的ADXL357均为低噪声密度、低0g失调漂移、低功耗、3轴加速度计,具有可选测量范围。低失调、低噪声和低功耗ADXL357可在高振动环境下实现精确的倾斜测量。ADXL356在更高频率范围内
    的头像 发表于 09-03 12:04 1721次阅读
    <b class='flag-5'>ADXL</b>357的替代选择

    Nuvoton_8051_ISP-ICP_Programmer_v7.15中缺少ISP加载器的源代码怎么解决?

    : isp_code_n76e885_v4.10_comport.bin isp_code_n76e616_v4.10_comport.bin 是否有指向这些引导加载程序的源代码的链接? 以下内容为
    发表于 08-18 06:30

    在linux系统中,通过I2C和CCG5通讯,有没有和CCG5通过I2C进行固件升级?状态配置的有没有可以参考的源代码

    在linux系统中,通过I2C和CCG5通讯,有没有和CCG5通过I2C进行固件升级,状态配置的 有没有可以参考的源代码? 固件升级是在linux kernel里面实现 还是在用户空间 通过 访问 i2c设备 进行通讯
    发表于 07-17 06:59

    Analog Devices Inc. EVAL-ADXL382评估板 - INACTIVE数据手册

    Analog Devices EVAL-ADXL382评估板包括以下评估板:EVAL-ADXL382BB-1Z(ADXL382 SPI型号用分线板)、EVAL-ADXL
    的头像 发表于 06-03 09:38 1564次阅读
    Analog Devices Inc. EVAL-<b class='flag-5'>ADXL</b>382评估板 - INACTIVE数据手册

    基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)下载

    基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)推荐下载!
    发表于 05-29 21:45

    基于STM32的卫星GPS路径记录仪(附完整源代码)实例项目下载

    基于STM32的卫星GPS路径记录仪(附完整源代码)实例项目推荐下载!
    发表于 05-29 21:35