历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2019年10月14日 | 基于STM32F0的ADS1118驱动源程序

2019-10-14 来源:eefocus

项目用到ADS1118作为AD采集,项目使用MCU为STM32F030,使用STM32CubeMX建立工程

单片机源程序如下:

/**

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

  * File Name          : main.c

  * Description        : Main program body

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

  ** This notice applies to any and all portions of this file

  * that are not between comment pairs USER CODE BEGIN and

  * USER CODE END. Other portions of this file, whether 

  * inserted by the user or by software development tools

  * are owned by their respective copyright owners.

  *

  * COPYRIGHT(c) 2018 STMicroelectronics

  *

  * Redistribution and use in source and binary forms, with or without modification,

  * are permitted provided that the following conditions are met:

  *   1. Redistributions of source code must retain the above copyright notice,

  *      this list of conditions and the following disclaimer.

  *   2. Redistributions in binary form must reproduce the above copyright notice,

  *      this list of conditions and the following disclaimer in the documentation

  *      and/or other materials provided with the distribution.

  *   3. Neither the name of STMicroelectronics nor the names of its contributors

  *      may be used to endorse or promote products derived from this software

  *      without specific prior written permission.

  *

  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER

  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  *

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

  */

/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f0xx_hal.h"

#include "spi.h"

#include "gpio.h"


/* USER CODE BEGIN Includes */

#include "ads1118.h"

/* USER CODE END Includes */


/* Private variables ---------------------------------------------------------*/


/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/


/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);


/* USER CODE BEGIN PFP */

/* Private function prototypes -----------------------------------------------*/


/* USER CODE END PFP */


/* USER CODE BEGIN 0 */

uint16_t ConversionValue;

float ad;

uint16_t count = 0xC283;//0x8283;

/* USER CODE END 0 */

void delay1(uint32_t x)        //x=100W 延时1s(不精确)

{

        uint32_t i=0;

        while(x--)

        {

                i=10;

                while(i--);

        }

}

        uint16_t adValue[4];

        uint32_t conversion;

        uint32_t config;

        float adV[4];

int main(void)

{


  /* USER CODE BEGIN 1 */

        int i = 0;


  /* USER CODE END 1 */


  /* MCU Configuration----------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_SPI1_Init();

        


  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */

                switch(i) {

                case 0:

                        count = 0xc283;

                        break;

                case 1:

                        count = 0xd283;

                        break;

                case 2:

                        count = 0xe283;

                        break;

                case 3:

                        count = 0xf283;

                        break;

                default:

                        count = 0xc283;

                        i = 0;

                        break;

                }

//                ConversionValue = SPI_RW_Reg(count);

//                ad = ConversionValue * 4.096 / 32768;

                

                conversion = SPI_RW_Reg(count);

                config = conversion & 0x0000FFFE;

                switch(config) {

                case 0x4282:

                        adValue[3] = conversion >> 16;

                        adV[3] = adValue[3] * 4.096 / 32768;

                        break;

                case 0x5282:

                        adValue[0] = conversion >> 16;

                        adV[0] = adValue[0] * 4.096 / 32768;

                        break;

                case 0x6282:

                        adValue[1] = conversion >> 16;

                        adV[1] = adValue[1] * 4.096 / 32768;

                        break;

                case 0x7282:

                        adValue[2] = conversion >> 16;

                        adV[2] = adValue[2] * 4.096 / 32768;

                        break;

                default:


                        break;

                }

//                adV[i] = adValue[i] * 4.096 / 32768;

//                

//                i++;

                if(++i > 3)        i = 0;

                

                delay1(0x00009fff);

  }

  /* USER CODE END 3 */


}


/** System Clock Configuration

*/

void SystemClock_Config(void)

{


  RCC_OscInitTypeDef RCC_OscInitStruct;

  RCC_ClkInitTypeDef RCC_ClkInitStruct;


    /**Initializes the CPU, AHB and APB busses clocks 

    */

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

  RCC_OscInitStruct.HSEState = RCC_HSE_ON;

  RCC_OscInitStruct.HSIState = RCC_HSI_ON;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;

  RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }


    /**Initializes the CPU, AHB and APB busses clocks 

    */

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1;

推荐阅读

史海拾趣

CONEXANT公司的发展小趣事

在电子行业的历史长河中,洛克维尔国际是一个不可忽视的名字。作为一家由威拉德·洛克维尔创立的大型公司,洛克维尔国际通过一系列合并与收购,逐渐壮大其业务版图。然而,随着时间的推移,公司进行了战略调整,并于1996年将其半导体部门剥离。这一剥离行动最终催生了科胜讯公司(Conexant Systems),一个专注于半导体技术的独立实体。科胜讯公司继承了洛克维尔在半导体领域的深厚技术积累和市场经验,为其后续的发展奠定了坚实基础。

Aimtec公司的发展小趣事

作为一家注重品质的企业,Aimtec公司深知质量管理体系的重要性。因此,公司投入大量资源,建立了完善的质量管理体系,并通过了ISO 9001:2015等国际质量管理体系认证。这些认证不仅证明了Aimtec公司在质量管理方面的实力,也为公司的业务拓展提供了有力的保障。通过持续的质量改进和创新,Aimtec的产品在行业中赢得了良好的口碑。

HBControls公司的发展小趣事
首先确认冰箱电源是否正常,插头是否牢固插入插座,电源插座是否有电。
Heidenhain Corp公司的发展小趣事

在全球化背景下,海德汉公司不断拓展其国际市场版图。通过参加国际展会、建立海外分支机构等方式,海德汉成功将其高精度数控系统和自动化解决方案推向全球电子市场。特别是在亚洲、欧洲和北美等电子产业发达的地区,海德汉的产品和技术得到了广泛应用和认可。这一市场拓展战略不仅提升了海德汉的品牌知名度和市场份额,也为其在电子行业的长期发展奠定了坚实基础。

需要注意的是,以上故事虽基于事实背景构建,但具体细节和案例可能有所虚构或简化,以符合问题要求和字数限制。

Crane Co.公司的发展小趣事

在1870年代,Crane Co.在制造业改善方面争当先驱。公司引入了由R. T. Crane发明的多用途机器,以及移动模具和浇铸金属的传送系统。这些创新技术不仅提高了生产效率,还标志着铸造领域流水线生产的开端。这一时期的变革为Crane Co.在电子行业的发展奠定了技术基础。

Aavid Niagra公司的发展小趣事

随着电子产品的更新换代速度加快,散热技术也面临着更高的要求。Aavid Niagra公司敏锐地捕捉到了这一市场变化,加大了在研发方面的投入,推出了一系列创新性的散热产品。这些产品不仅提高了电子设备的性能稳定性,还大大降低了能耗,赢得了客户的广泛好评。公司的技术创新能力成为了其持续发展的核心竞争力。

问答坊 | AI 解惑

急救!关于protel 99se的仿真

当我在对一个电路进行仿真时总是出现这些错误,但我又不知道什么意思,请各位高手指点一下。 非常感谢! C3 Error: Pin order data (PINS=1:[]) not in READ ONLY field 4. Pins sorted by pin-name. C3 Error ...…

查看全部问答>

电气柜内线号标法?

做电气的几年中,我发现有些厂家线号是头尾一致(为同一线号),这种标法后期维护查线较烦,也有厂家头尾一不致(比如说A另一头B,A头标志为B头的电气元件及其的输入/输出点号,B头标志为A头的电气元件及其的输入/输出点号),这种方法线号有时会较 ...…

查看全部问答>

关于函数写法与编译结果的讨论

请分析下面的结果: 1:函数  XX(结构体变量)2:函数  XX(结构体指针) 分别调用两个函数,请问在程序编译后,结果是否一样? 如果不一样为什么?…

查看全部问答>

关于实时绘制手写笔轨迹的一个小问题

做了一个手写识别软件,用伪驱动的方法截获了全屏书写的轨迹。用手写笔在屏幕上书写的时候是可以收到轨迹信息的,也可以做出识别,但是手写笔在屏幕上画过的笔迹无法显示,在没有实现全屏书写的时候我在窗口里写实可以实时绘出手写轨迹的。下面是绘 ...…

查看全部问答>

找两名兼职的WinCE内核和驱动开发人员

找两名兼职的WinCE内核开发人员,要求熟悉Marvell Xscale 系列CPU的内核和驱动开发工作, 要求熟悉一款以上以下的CPU: PXA255,PXA270,PXA310,PXA300,PXA320,PXA168. 地点在北京.有PDA或智能手机开发经验的人最佳. 熟悉三星的S3C6410的也可以,我 ...…

查看全部问答>

NK.nb0文件是否包含有起始地址信息?

我知道NK.bin文件头中是包含有NK的起始地址信息的,不知道nb0文件是否有? 我现在想通过NK.nb0进行升级,但是升级后需要保存NK.nb0拷贝到内存的地址到NAND Flash中,不知道NK.nb0文件是否有这个信息?…

查看全部问答>

关于高速AD采样的系统设计问题

  各位高手,本人基于课题需要,打算开发设计一个高速AD采样系统, 也许需要外检测电路+独立AD模块+嵌入式CPU组合实现 主要有以下要求: 1. AD模块的采样+转换时间=10MHz 2. CPU工作主频足够高,CPU内开辟一个足够大的缓存区,通过 ...…

查看全部问答>

用VHDL设计一个倒计时计数器,预置一个四位十进制数

有冇朋友EDA编程叻噶??帮帮手啊·~~        用VHDL设计一个倒计时计数器,预置一个四位十进制数,每个时钟脉冲到来减1,减到0即停止,发出时间到的报警信号。报警时,用50hz驱动蜂鸣器,发出报警声音。只提供一个1khz信号的 ...…

查看全部问答>

CETK怎么测试第三方的WIFI驱动??(急求)

小弟超菜 现在领的任务是用CETK测试无线网卡驱动 系统wince5.0,无线网卡i8686 开发板是自己公司做的,上面带的无线网卡驱动不是微软cetk中默认测试例子,看说明这种第三方驱动需要自行加入CETK 眼下问题关键就是怎么把Tux.dll和驱动的.dll连接 ...…

查看全部问答>