0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)項(xiàng)目中使用新IC芯片調(diào)試方法

CHANBAEK ? 來源:想啥做啥 ? 作者: wllis ? 2023-11-30 15:35 ? 次閱讀

前一陣子,一位小伙伴咨詢我一款新IC芯片怎么使用,借此機(jī)會(huì)我順便把我日常工作中經(jīng)常用到的一種調(diào)試方法介紹給小伙伴們,希望對(duì)對(duì)大家有所幫助。準(zhǔn)備倉促,文中難免有技術(shù)性錯(cuò)誤,歡迎大家給予指正,并給出好的建議...

前言:

我們?cè)?a target="_blank">單片機(jī)的項(xiàng)目開發(fā)過程中經(jīng)常會(huì)遇到使用新IC芯片的情況,某寶賣家有個(gè)時(shí)候也提供不了對(duì)應(yīng)開發(fā)程序,到網(wǎng)上找資料也找不到;很多初學(xué)者面對(duì)這樣的問題往往束手無策,這里我給大家介紹我經(jīng)常用的其中一種新IC調(diào)試的方法。

因?yàn)檫@個(gè)芯片比較簡(jiǎn)單我這里采用下面步驟進(jìn)行:

第一步: 先用arduino+面包板快速搭建電路驗(yàn)證芯片功能

第二步: 使用STM32CubeIDE快速搭建工程驗(yàn)證在STM32上工作是否正常

Tips :由于我手頭沒有 萬用表 ,這里我使用arduino的模擬電壓采集功能通過串口打印出來作為電位計(jì)的電壓監(jiān)控用。

首先,我們先快速瀏覽芯片數(shù)據(jù)手冊(cè),獲取重要信息

IC型號(hào):TLP0501

電壓范圍:2.7~5.5V

溫度范圍:-40~125℃

通信方式:SPI

阻值:100KΩ

阻值偏差:±20%

該芯片是德州儀器的一款單通道數(shù)字電位計(jì),通信方式是SPI總線,單方向的,即只能控制芯片,不能讀取輸入數(shù)據(jù),下面是數(shù)據(jù)手冊(cè)的具體介紹。

環(huán)境參數(shù):主要包括溫度使用范圍、電壓使用范圍、誤差、溫度漂移以及實(shí)物引腳對(duì)應(yīng)關(guān)系都在這里

圖片

環(huán)境參數(shù)

功能框圖:主要介紹該芯片的內(nèi)部組成和工作原理

圖片

功能框圖

引腳定義:每個(gè)引腳的功能介紹

圖片

引腳定義

SPI通信說明:主要介紹芯片的通信方式,這個(gè)芯片因?yàn)闆]有設(shè)置模式功能,只需要對(duì)芯片直接寫數(shù)據(jù)即可,通信方式與我們所使用的74HC595的方式類似

圖片

SPI通信說明

真值對(duì)照表:也就是數(shù)字量對(duì)應(yīng)的實(shí)際電阻值,我這里只截取了一部分,剩下的大家可以自行去參考詳細(xì)手冊(cè)

圖片

真值對(duì)照表

對(duì)于要調(diào)通這個(gè)芯片這些介紹基本滿足我們的需求了

芯片模塊的快速制作

在芯片商城上買了兩片回來調(diào)試,芯片購買的費(fèi)用知乎小伙伴給付了

準(zhǔn)備好芯片+轉(zhuǎn)接板

圖片

焊接兩塊是為了防止在使用過程中意外弄壞另一塊可以立馬補(bǔ)上,確保調(diào)試正常進(jìn)行而不耽誤太多時(shí)間

圖片

焊接好排針,并在供電端加上0.1uF的濾波電容,降低高頻供電干擾

圖片

這樣我們的模塊就制作完成了

arduino快速搭建工程:

電路原理

圖片

電路原理圖

引腳對(duì)應(yīng)關(guān)系:

arduino uno 引腳4 -> CLK

arduino uno 引腳5 -> DIN

arduino uno 引腳6 -> CS

arduino uno 引腳5v -> VCC、VREF

arduino uno 引腳GND -> GND、L

arduino uno 引腳A0 -> VRES_OUT

首先用面包板+杜邦線搭好電路

說明:我在這里使用的供電電壓和數(shù)字電位計(jì)參考電壓都是使用的5V,相應(yīng)的輸出結(jié)果也是在0~5V范圍

圖片

然后使用arduino自帶的庫,編寫代碼,再變動(dòng)阻值參數(shù),看下輸出的實(shí)際結(jié)果和真值表是否對(duì)應(yīng)的上

數(shù)值為0x00時(shí)對(duì)應(yīng)的模擬電壓輸出

圖片

數(shù)值為0x88時(shí)對(duì)應(yīng)的模擬電壓輸出

數(shù)值為0xFF時(shí)對(duì)應(yīng)的模擬電壓輸出

圖片

經(jīng)過驗(yàn)證,在arduino上跑沒有問題,接下來我們準(zhǔn)備在STM32上去運(yùn)行

arduino代碼部分:

/*
  AnalogReadSerial


  Reads an analog input on pin 0, prints the result to the Serial Monitor.
  Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
  Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.


  This example code is in the public domain.


  http://www.arduino.cc/en/Tutorial/AnalogReadSerial
*/


int CS_Pin = 6;
int CLK_Pin = 4;
int DIN_Pin = 5; //這里定義了那三個(gè)腳


// the setup routine runs once when you press reset:
void setup() {

  pinMode(CS_Pin,OUTPUT);
  pinMode(CLK_Pin,OUTPUT);
  pinMode(DIN_Pin,OUTPUT); //讓三個(gè)腳都是輸出狀態(tài)

  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);


  digitalWrite(CS_Pin,LOW); 
  shiftOut(DIN_Pin,CLK_Pin,MSBFIRST,0xFF);
  digitalWrite(CS_Pin,HIGH);
}


// the loop routine runs over and over again forever:
void loop() {

  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  float voltage= sensorValue * (5.0 / 1023.0);   //換算成電壓
  // print out the value you read:
  Serial.println(voltage,DEC);
  delay(100);        // delay in between reads for stability
}

STM32搭建工程驗(yàn)證

說明:STM32使用的供電電壓和數(shù)字電位計(jì)參考電壓都是3V3,相應(yīng)的輸出結(jié)果也是在0~3V3范圍

圖片

電路原理圖

引腳對(duì)應(yīng)關(guān)系:

PA4 -> CLK

PA5 -> DIN

PA6 -> CS

3V3 -> VCC、VREF

arduino uno 引腳GND -> GND、L

arduino uno 引腳A0 -> VRES-OUT

開發(fā)板+面包板搭建電路

圖片

用STM32CubeIDE建立一個(gè)工程

圖片

配置好PA4、PA5、PA6引腳為輸出

圖片

生成代碼,并添加TLP0501的驅(qū)動(dòng)代碼

圖片

編譯看運(yùn)行的效果,輸入值為0x55

更改輸入的數(shù)值為0x22,驗(yàn)證是否正確

圖片

main函數(shù)代碼部分:

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * < h2 >< center >? Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.< /center >< /h2 >
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"


/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */


/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */


#define TLP0501_DIN_H()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)
#define TLP0501_DIN_L()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)


#define TLP0501_CS_H()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)
#define TLP0501_CS_L()     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)


#define TLP0501_CLK_H()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)
#define TLP0501_CLK_L()    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)




/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */


/* USER CODE END PM */


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


/* USER CODE BEGIN PV */


/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */


/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void TLP0501_WriteByte( uint8_t data )
{
    uint8_t j;
    for ( j=8; j >=1; j--)
    {
        TLP0501_CLK_L();
        __NOP();
        if(data & 0x80 ){   TLP0501_DIN_H();    }
        else            {   TLP0501_DIN_L();    }
        data < <= 1;
        TLP0501_CLK_H();
    }
}




/* USER CODE END 0 */


/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */


  /* 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();
  /* USER CODE BEGIN 2 */


  TLP0501_CS_L();
  TLP0501_WriteByte(0x22);
  TLP0501_CS_H();




  /* USER CODE END 2 */


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */




    /* USER CODE BEGIN 3 */
  }




  /* USER CODE END 3 */
}


/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}


/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};


  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();


  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET);


  /*Configure GPIO pins : PA4 PA5 PA6 */
  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


}


/* USER CODE BEGIN 4 */


/* USER CODE END 4 */


/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */


  /* USER CODE END Error_Handler_Debug */
}


#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %drn", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

總結(jié):

1、這里介紹了眾多新IC芯片調(diào)試方式中的一種,后期有機(jī)會(huì)再陸續(xù)介紹其他IC或新模塊的調(diào)試方法。

2、文中只是簡(jiǎn)單的對(duì)芯片進(jìn)行功能測(cè)試,實(shí)際項(xiàng)目中還會(huì)有移植、驅(qū)動(dòng)的可靠性、穩(wěn)定性等測(cè)試工作 。

3、我們要善于運(yùn)用手頭的工具、arduino等快速驗(yàn)證開發(fā)環(huán)境;模塊的快速驗(yàn)證,特別是在項(xiàng)目開發(fā)過程中,時(shí)間就是金錢,對(duì)每一種工具的熟練掌握也是單片機(jī)開發(fā)過程中不可或缺的重要技能。

4、硬件調(diào)試與軟件調(diào)試有很大的區(qū)別,很多時(shí)候是一次性,不可逆轉(zhuǎn)的,不像軟件Ctl+Z可以撤銷;硬件在使用過程中出現(xiàn)意外損壞情況很正常:焊接不當(dāng)、意外插錯(cuò),靜電防護(hù)不到位等等;我們要善于運(yùn)用一些項(xiàng)目技巧,權(quán)衡時(shí)間或花費(fèi);這里之所以選擇焊接兩個(gè)芯片模塊也是為了防止這種意外的發(fā)生而對(duì)調(diào)試造成不必要的時(shí)間耽擱。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電路圖
    +關(guān)注

    關(guān)注

    10404

    文章

    10733

    瀏覽量

    541111
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6064

    文章

    44931

    瀏覽量

    647402
  • IC芯片
    +關(guān)注

    關(guān)注

    8

    文章

    254

    瀏覽量

    26946
  • Arduino
    +關(guān)注

    關(guān)注

    189

    文章

    6493

    瀏覽量

    190182
  • 面包板
    +關(guān)注

    關(guān)注

    4

    文章

    299

    瀏覽量

    18014
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)串口模塊調(diào)試方法

    筆者在調(diào)試某Cortex-M3內(nèi)核單片機(jī)時(shí)遇到一個(gè)問題,此單片機(jī)不具備在線仿真功能,因此調(diào)試代碼時(shí)只能使用UART輸出Log的方式調(diào)試
    發(fā)表于 07-28 15:48 ?1871次閱讀
    <b class='flag-5'>單片機(jī)</b>串口模塊<b class='flag-5'>調(diào)試</b><b class='flag-5'>方法</b>

    單片機(jī)如何控制調(diào)試信息輸出

    單片機(jī)調(diào)試log信息輸出控制方法因子最近在研發(fā)公司項(xiàng)目:基于無線通信的****物聯(lián)網(wǎng)應(yīng)用。過程中涉及到了多個(gè)程序模塊,包括MQTT、JSON解析、二維碼生成等。在
    發(fā)表于 01-27 07:18

    單片機(jī)的在線調(diào)試方法

    本文主要講述的是單片機(jī)的在線調(diào)試方法
    發(fā)表于 04-22 16:43 ?34次下載

    ARM單片機(jī)開發(fā)調(diào)試方法

    ARM單片機(jī)開發(fā)調(diào)試方法
    發(fā)表于 07-25 13:21 ?36次下載

    單片機(jī)開發(fā)調(diào)試應(yīng)注意的問題

    單片機(jī)開發(fā)調(diào)試應(yīng)注意的問題 1、使用總線不外引的單片機(jī) ·是最正統(tǒng)的單片機(jī)使用模式 ·符合小型、簡(jiǎn)單、可靠、廉價(jià)的單片機(jī)設(shè)計(jì)初衷
    發(fā)表于 03-26 12:30 ?1795次閱讀

    單片機(jī)最小系統(tǒng)的調(diào)試方法_單片機(jī)最小系統(tǒng)設(shè)計(jì)制作及開發(fā)流程

    本文主要介紹了單片機(jī)最小系統(tǒng)的調(diào)試方法單片機(jī)最小系統(tǒng)設(shè)計(jì)制作及開發(fā)流程。
    的頭像 發(fā)表于 04-24 09:35 ?1.3w次閱讀
    <b class='flag-5'>單片機(jī)</b>最小系統(tǒng)的<b class='flag-5'>調(diào)試</b><b class='flag-5'>方法</b>_<b class='flag-5'>單片機(jī)</b>最小系統(tǒng)設(shè)計(jì)制作及開發(fā)流程

    單片機(jī)程序常用的幾種調(diào)試方法

    單片機(jī)程序常用的幾種調(diào)試方法,這些調(diào)試方法都需要結(jié)合電腦上位機(jī),以下我羅列一些
    發(fā)表于 07-17 09:31 ?1.3w次閱讀

    Keil5創(chuàng)建51單片機(jī)項(xiàng)目中CPU顯示為空

    Keil5創(chuàng)建51單片機(jī)項(xiàng)目中CPU顯示為空
    發(fā)表于 11-23 16:36 ?12次下載
    Keil5創(chuàng)建51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>項(xiàng)目中</b>CPU顯示為空

    單片機(jī)控制調(diào)試信息輸出的方法

    單片機(jī)調(diào)試log信息輸出控制方法因子最近在研發(fā)公司項(xiàng)目:基于無線通信的****物聯(lián)網(wǎng)應(yīng)用。過程中涉及到了多個(gè)程序模塊,包括MQTT、JSON解析、二維碼生成等。在
    發(fā)表于 12-03 12:06 ?0次下載
    <b class='flag-5'>單片機(jī)</b>控制<b class='flag-5'>調(diào)試</b>信息輸出的<b class='flag-5'>方法</b>

    單片機(jī)項(xiàng)目中LED的重要性~

    很多初學(xué)者覺得自己學(xué)的東西很基礎(chǔ),擔(dān)心今后實(shí)際工作用不到。有初學(xué)者問了這樣的問題:單片機(jī)真正開發(fā)產(chǎn)品和學(xué)習(xí)的時(shí)候有什么差別,平時(shí)學(xué)的LED、ADC這些東西,在實(shí)際項(xiàng)目中會(huì)用到嗎?雖然技術(shù)更...
    發(fā)表于 12-29 19:28 ?2次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>項(xiàng)目中</b>LED的重要性~

    單片機(jī)解密方法

    單片機(jī)解密又叫單片機(jī)破解,芯片解密,IC解密,但是這嚴(yán)格說來這幾種稱呼都不科學(xué),但已經(jīng)成 了習(xí)慣叫法,我們把CPLD解密,DSP解密都習(xí)慣稱為單片機(jī)
    發(fā)表于 09-29 11:44 ?2077次閱讀

    單片機(jī)常用的調(diào)試方法

    單片機(jī)程序調(diào)試過程中,串口打印調(diào)試方法是非常重要的手段,在使用串口調(diào)試時(shí),我們更多的是使用printf。但是下面我們不介紹printf,介
    的頭像 發(fā)表于 04-04 14:58 ?5446次閱讀

    單片機(jī)開發(fā)調(diào)試工具有哪些?

    單片機(jī)調(diào)試是一個(gè)有條不紊的過程,用于查找和減少單片機(jī)程序中的錯(cuò)誤數(shù)量,使其按預(yù)期工作。有時(shí)候,單片機(jī)程序調(diào)試很困難,因?yàn)槟骋粋€(gè)系統(tǒng)模塊中的
    的頭像 發(fā)表于 07-07 12:29 ?1913次閱讀

    單片機(jī)項(xiàng)目中LED的重要性

    單片機(jī)項(xiàng)目中LED的重要性
    的頭像 發(fā)表于 09-18 16:19 ?1111次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>項(xiàng)目中</b>LED的重要性

    單片機(jī)調(diào)試常見問題與解決方法

    單片機(jī)調(diào)試是嵌入式系統(tǒng)開發(fā)中的一個(gè)重要環(huán)節(jié),它涉及到對(duì)單片機(jī)程序的測(cè)試和優(yōu)化,以確保系統(tǒng)能夠正常工作。在調(diào)試過程中,開發(fā)者可能會(huì)遇到各種問題。 1. 程序無法燒錄到
    的頭像 發(fā)表于 11-01 14:11 ?2781次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品