LDC1000在STM32的程序 LDC1000的STM32驱动源程序

发布者:Radiant777最新更新时间:2024-07-26 来源: elecfans关键字:LDC1000  STM32  驱动源程序 手机看文章 扫描二维码
随时随地手机看文章

本文主要介绍了关于LDC1000的STM32驱动源程序,希望能对各位有所帮助。

     LDC1000在STM32的程序

  • #include 'stm32f10x.h'

  • #include 'usart1.h'

  • #include 'led.h'

  • #include 'delay.h'

  • #include 'stdio.h'

  • #include 'ldc1000.h'

  • #include 'pwm.h'

  • /*----------------------------------------

  •                                 全局变量

  • ----------------------------------------*/

  • extern uint8_t RegArray[REG_LEN];

  • int8_t  i = 0;

  • /*----------------------------------------

  •                                 主函数

  • ----------------------------------------*/

  • int main(void)

  • {

  •         DelayInit();

  •         LED_GPIO_Config();

  •         USART1_Config();

  •         PWM_TIM4_CH1_Config(8,0);         //输出8MHz时钟给TBCLK,LDC1000需要8MHz时钟方可运行

  •         delayms(100);

  •         LDC1000_Init();

  •         //printf('LDC1000-DEMOrn');

  •         while(1)

  •         {        //LDC1000_WriteReg(LDC1000_CMD_SENSORFREQ,  0x94);

  •                 //delayms(10);

  •                 printf('0x00 = %xrn',LDC1000_ReadReg(0x00));

  •                 printf('0x01 = %xrn',LDC1000_ReadReg(0x01));

  •                 printf('0x02 = %xrn',LDC1000_ReadReg(0x02));

  •                 printf('0x03 = %xrn',LDC1000_ReadReg(0x03));

  •                 printf('0x04 = %xrn',LDC1000_ReadReg(0x04));

  •                 printf('0x05 = %xrn',LDC1000_ReadReg(0x05));

  •                 printf('0x06 = %xrn',LDC1000_ReadReg(0x06));

  •                 printf('0x07 = %xrn',LDC1000_ReadReg(0x07));

  •                 printf('0x08 = %xrn',LDC1000_ReadReg(0x08));

  •                 printf('0x09 = %xrn',LDC1000_ReadReg(0x09));

  •                 printf('0x0A = %xrn',LDC1000_ReadReg(0x0A));

  •                 printf('0x0B = %xrn',LDC1000_ReadReg(0x0B));

  •  

  •                 printf('0x20 = %xrn',LDC1000_ReadReg(0x20));

  •                 printf('0x21 = %xrn',LDC1000_ReadReg(0x21));

  •                 printf('0x22 = %xrn',LDC1000_ReadReg(0x22));

  •                 printf('0x23 = %xrn',LDC1000_ReadReg(0x23));

  •                 printf('0x24 = %xrn',LDC1000_ReadReg(0x24));

  •                 printf('0x25 = %xrn',LDC1000_ReadReg(0x25));

  • //                 LDC1000_ReadBytes(LDC1000_CMD_REVID,&RegArray[0],12);

  • //                for(i=0; i<12; i++)

  • //                {

  • //                        printf('Addr=%x  Data=%xrn',i,RegArray);

  • //                }               

  •                 delayms(1000);  

  •         }                       


单片机源程序如下:

  • #include 'ldc1000.h'

  • /*----------------------------------------

  •                                 全局变量

  • ----------------------------------------*/

  • uint8_t RegArray[REG_LEN];

  • /*----------------------------------------

  •                                  宏定义

  • ----------------------------------------*/

  • #define CSB_0         GPIOB->BRR  = GPIO_Pin_7

  • #define CSB_1         GPIOB->BSRR = GPIO_Pin_7

  • /*----------------------------------------

  • 函数功能: LDC1000初始化

  • 函数参数: 无

  • ----------------------------------------*/

  • void LDC1000_Init(void)

  • {

  •         LDC1000_GPIO_Init();

  •         LDC1000_SPI_Init();

  •  

  •     LDC1000_WriteReg(LDC1000_CMD_RPMAX,       0x13);

  •     LDC1000_WriteReg(LDC1000_CMD_RPMIN,       0x3A);

  •         LDC1000_WriteReg(LDC1000_CMD_SENSORFREQ,  0x94);

  •         LDC1000_WriteReg(LDC1000_CMD_LDCCONFIG,   0x17);

  •         LDC1000_WriteReg(LDC1000_CMD_CLKCONFIG,   0x02);

  •         LDC1000_WriteReg(LDC1000_CMD_INTCONFIG,   0x02);

  •  

  •         LDC1000_WriteReg(LDC1000_CMD_THRESHILSB,  0x50);

  •         LDC1000_WriteReg(LDC1000_CMD_THRESHIMSB,  0x14);

  •         LDC1000_WriteReg(LDC1000_CMD_THRESLOLSB,  0xC0);

  •         LDC1000_WriteReg(LDC1000_CMD_THRESLOMSB,  0x12);

  •  

  •         LDC1000_WriteReg(LDC1000_CMD_PWRCONFIG,   0x01);

  • }

  • /*----------------------------------------

  • 函数功能: LDC1000 GPIO初始化

  • 函数参数: IO口连接图

  •  

  •          +5V         <->         +5V

  •         DCLK        <->         PB6 <-> TIM4_CH1

  •         SCLK    <->         PA5 <-> SPI1_SCK

  •         SDI     <->         PA7 <-> SPI1_MOSI

  •         SDO     <->         PA6 <-> SPI1_MISO

  •         VIO                <->         3V3

  •         GND                <->         GND

  •         INT     <->         PC2 <-> GPIO

  •         CSB                <->         PB7        <-> GPIO

  •         GND                <->                GND

  • ----------------------------------------*/

  • void LDC1000_GPIO_Init(void)

  • {

  •         GPIO_InitTypeDef GPIO_InitStructure;

  •  

  •         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //记住使能AFIO时钟

  •         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC , ENABLE);

  •  

  •         //PB6->PWM_OUTPUT

  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

  •           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                //PB6复用推挽输出

  •           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  •           GPIO_Init(GPIOB, &GPIO_InitStructure);

  •  

  •         //A5->SCK  A6->MISO A7->MOSI

  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           //SPI用复用推挽输出

  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  •         GPIO_Init(GPIOA,&GPIO_InitStructure);

  •  

  •         //PC2->INT

  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  •         GPIO_Init(GPIOC,&GPIO_InitStructure);

  •  

  •         //PB7->CSB

  •         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

  •         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  •         GPIO_Init(GPIOB,&GPIO_InitStructure);

[1] [2]
关键字:LDC1000  STM32  驱动源程序 引用地址:LDC1000在STM32的程序 LDC1000的STM32驱动源程序

上一篇:关于STM32CubeMX重大升级
下一篇:stm32 系列ili9341lcd屏驱动程序

推荐阅读最新更新时间:2024-11-03 07:07

stm32编译出问题解决
.FWlibincstm32f10x_conf.h(33): warning: #14-D: extra text after expected end of preprocessing directive 额外的文本在在预处理命令后面出现 #include stm32f10x_dma.h */ 出问题的地方就是这个 */ 仿照原子自己建立工程的时候出现的问题修改: 问题及修改: 1)..SYSTEMdelaydelay.c(27): error: #20: identifier SysTick_CLKSource_HCLK_Div8 is undefined 解决方法:在delay.c中添加
[单片机]
STM32学习笔记(4):通用定时器基本定时功能
TIMER基本定时功能 1.STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 定时器 计数器分辨率 计数器类型 预分频系数 产生DMA请求 捕获/比较通道 互补输出 TIM1 TIM8 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4 有 TIM2 TIM3 TIM4 TIM5 16位 向上,向下,向上/向下 1-65536之间的任意数 可以 4
[单片机]
基于STM32单片机的电池管理系统触摸屏设计
0 引 言 电动车一直以清洁环保而备受关注,加上能源危机加剧、油价不断上涨,电动车也越来越受到用户的青睐。电动车一般采用锂电池供电,由多个单体电池串联成电池组作为动力电源。但由于各个串联单体电池特性不能保证完全一致,因此相同的电流下充电放电速度也会不同,如果不进行均衡干预,电池寿命会大大缩短,因此需要实时监控各个单体电池的状态、总电压、总电流,根据状态适时进行电池充放电均衡,并且充放电均衡时,均衡状态也要实时进行检测,所以就有了电动车电池能量管理系统(EMS)。实践证明EMS可以有效延长电动车电池使用寿命,是电动车中十分重要的管理系统。 EMS主要包括:信息采集模块、充放电均衡模块、信息集中处理模块以及显示模块。图1为自主研发
[单片机]
基于<font color='red'>STM32</font>单片机的电池管理系统触摸屏设计
基于STM32 I2C的TMP101温度传感器的C源码
搞这个历程差不多花了我一个周末的时间,一片小小的TMP101确实让我破费脑筋。最后甚至使用了示波器直接观察SDA SCL 的波形。不过示波器的使用确实纠正我一个严重且低级的错误。这期间也在网上搜过STM32 的I2C 应用 大多都是在说 STM32 的I2C固件库写的烂、STM32的硬件有问题、I2C接口没法用等等,最后解决方式都是用软件像51那样用IO口软件模拟IIC时序。但我看了STM32最新的勘误表,根本没有所谓STM32的IIC硬件设计缺陷。我可不想把STM32用的像8051一样。我要用高效的硬件I2C而且要用ST官方库来实现~! 心得: 函数 I2C_CheckEvent () 这个典型的用法是 while(!
[单片机]
基于<font color='red'>STM32</font> I2C的TMP101温度传感器的C源码
【MCP3208/MCP3204】STM32多通道AD采集
芯片简介 MCP3208/MCP3204是一种片外12位精度的AD采集芯片,前者是8通道,后者是4通道,其他的都一样。找不到该芯片的中文手册的点这里。 引脚定义 时序 结合手册5.0章节的说明看时序图。 电平状态稳定时间 可以看到,最短稳定时间的最长的为500ns(0.5us),均小于1us,只要在程序中保证引脚的电平稳定时间至少超过1us即可。 控制位 第一个CS拉低且Din拉高的信号为起始位。紧跟着其实位的是Single/Diff位、以及D0 D1 D2位。 起始位后的第四个时钟周期的上升沿开始采样,在第五个时钟周期的下降沿采样结束。 如果设备上电的时候CS引脚是低电平,需要拉高再拉低
[单片机]
【MCP3208/MCP3204】<font color='red'>STM32</font>多通道AD采集
STM32 USB时钟设置
原则:STM32 的USB时钟不能超过48MHZ,因此如果时钟源为72MHZ,就需要进行1.5分频: RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); 如果时钟源为48MHZ,则进行1分频即可: RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1); STM32的时钟树如下:
[单片机]
<font color='red'>STM32</font> USB时钟设置
STM32RTC实时时钟
我用的是STM32库函数:两个知识点: 一、RTC时钟框图分析(重要) 二、时间是怎样显示出来的(简析) 一、RTC时钟框图分析(重要) 先熟悉一下几个知识点: 1、STM32的实时时钟(RTC)是一个独立的定时器! 2、RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位火从待机模式唤醒后RTC的设置和时间维持不变。 RTC这章中,对RTC相关的寄存器的操作特别重要,我在这里不解释了,请查阅手册。。 先上图! RTC时钟框图分为完全独立的两个部分:1、APB1接口部分(用来RTC相关的寄存器);2、RTC核心; 第一部分:APB1接口。注意:这里涉及到寄存器RTC_
[单片机]
STM32RTC实时时钟
STM32模数转换器 (ADC)介绍
STM32F4xx系列提供的12位ADC是逐次逼近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 V BAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。 ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。 单个ADC框图 ADC 引脚 ADC开关控制 可通过将ADC_CR2寄存器中的 ADON 位置1来为 ADC 供电。首次将 ADON 位置1时,会将ADC从掉电模式中唤醒。 SWSTART 或 JSWSTART 位置 1 时,启动 AD 转
[单片机]
<font color='red'>STM32</font>模数转换器 (ADC)介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved