色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機項目中使用新IC芯片調試方法

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

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

前言:

我們在單片機的項目開發過程中經常會遇到使用新IC芯片的情況,某寶賣家有個時候也提供不了對應開發程序,到網上找資料也找不到;很多初學者面對這樣的問題往往束手無策,這里我給大家介紹我經常用的其中一種新IC調試的方法。

因為這個芯片比較簡單我這里采用下面步驟進行:

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

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

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

首先,我們先快速瀏覽芯片數據手冊,獲取重要信息

IC型號:TLP0501

電壓范圍:2.7~5.5V

溫度范圍:-40~125℃

通信方式:SPI

阻值:100KΩ

阻值偏差:±20%

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

環境參數:主要包括溫度使用范圍、電壓使用范圍、誤差、溫度漂移以及實物引腳對應關系都在這里

圖片

環境參數

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

圖片

功能框圖

引腳定義:每個引腳的功能介紹

圖片

引腳定義

SPI通信說明:主要介紹芯片的通信方式,這個芯片因為沒有設置模式功能,只需要對芯片直接寫數據即可,通信方式與我們所使用的74HC595的方式類似

圖片

SPI通信說明

真值對照表:也就是數字量對應的實際電阻值,我這里只截取了一部分,剩下的大家可以自行去參考詳細手冊

圖片

真值對照表

對于要調通這個芯片這些介紹基本滿足我們的需求了

芯片模塊的快速制作

在芯片商城上買了兩片回來調試,芯片購買的費用知乎小伙伴給付了

準備好芯片+轉接板

圖片

焊接兩塊是為了防止在使用過程中意外弄壞另一塊可以立馬補上,確保調試正常進行而不耽誤太多時間

圖片

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

圖片

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

arduino快速搭建工程:

電路原理

圖片

電路原理圖

引腳對應關系:

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

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

說明:我在這里使用的供電電壓和數字電位計參考電壓都是使用的5V,相應的輸出結果也是在0~5V范圍

圖片

然后使用arduino自帶的庫,編寫代碼,再變動阻值參數,看下輸出的實際結果和真值表是否對應的上

數值為0x00時對應的模擬電壓輸出

圖片

數值為0x88時對應的模擬電壓輸出

數值為0xFF時對應的模擬電壓輸出

圖片

經過驗證,在arduino上跑沒有問題,接下來我們準備在STM32上去運行

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; //這里定義了那三個腳


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

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

  // 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搭建工程驗證

說明:STM32使用的供電電壓和數字電位計參考電壓都是3V3,相應的輸出結果也是在0~3V3范圍

圖片

電路原理圖

引腳對應關系:

PA4 -> CLK

PA5 -> DIN

PA6 -> CS

3V3 -> VCC、VREF

arduino uno 引腳GND -> GND、L

arduino uno 引腳A0 -> VRES-OUT

開發板+面包板搭建電路

圖片

用STM32CubeIDE建立一個工程

圖片

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

圖片

生成代碼,并添加TLP0501的驅動代碼

圖片

編譯看運行的效果,輸入值為0x55

更改輸入的數值為0x22,驗證是否正確

圖片

main函數代碼部分:

/* 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****/

總結:

1、這里介紹了眾多新IC芯片調試方式中的一種,后期有機會再陸續介紹其他IC或新模塊的調試方法。

2、文中只是簡單的對芯片進行功能測試,實際項目中還會有移植、驅動的可靠性、穩定性等測試工作 。

3、我們要善于運用手頭的工具、arduino等快速驗證開發環境;模塊的快速驗證,特別是在項目開發過程中,時間就是金錢,對每一種工具的熟練掌握也是單片機開發過程中不可或缺的重要技能。

4、硬件調試與軟件調試有很大的區別,很多時候是一次性,不可逆轉的,不像軟件Ctl+Z可以撤銷;硬件在使用過程中出現意外損壞情況很正常:焊接不當、意外插錯,靜電防護不到位等等;我們要善于運用一些項目技巧,權衡時間或花費;這里之所以選擇焊接兩個芯片模塊也是為了防止這種意外的發生而對調試造成不必要的時間耽擱。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電路圖
    +關注

    關注

    10354

    文章

    10723

    瀏覽量

    532147
  • 單片機
    +關注

    關注

    6041

    文章

    44615

    瀏覽量

    637368
  • IC芯片
    +關注

    關注

    8

    文章

    251

    瀏覽量

    26310
  • Arduino
    +關注

    關注

    188

    文章

    6477

    瀏覽量

    187541
  • 面包板
    +關注

    關注

    3

    文章

    298

    瀏覽量

    17605
收藏 人收藏

    評論

    相關推薦

    單片機串口模塊調試方法

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

    單片機如何控制調試信息輸出

    單片機調試log信息輸出控制方法因子最近在研發公司項目:基于無線通信的****物聯網應用。過程中涉及到了多個程序模塊,包括MQTT、JSON解析、二維碼生成等。在
    發表于 01-27 07:18

    單片機的在線調試方法

    本文主要講述的是單片機的在線調試方法
    發表于 04-22 16:43 ?34次下載

    ARM單片機開發調試方法

    ARM單片機開發調試方法
    發表于 07-25 13:21 ?36次下載

    單片機開發調試應注意的問題

    單片機開發調試應注意的問題 1、使用總線不外引的單片機 ·是最正統的單片機使用模式 ·符合小型、簡單、可靠、廉價的單片機設計初衷
    發表于 03-26 12:30 ?1756次閱讀

    單片機最小系統的調試方法_單片機最小系統設計制作及開發流程

    本文主要介紹了單片機最小系統的調試方法單片機最小系統設計制作及開發流程。
    的頭像 發表于 04-24 09:35 ?1.3w次閱讀
    <b class='flag-5'>單片機</b>最小系統的<b class='flag-5'>調試</b><b class='flag-5'>方法</b>_<b class='flag-5'>單片機</b>最小系統設計制作及開發流程

    單片機程序常用的幾種調試方法

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

    Keil5創建51單片機項目中CPU顯示為空

    Keil5創建51單片機項目中CPU顯示為空
    發表于 11-23 16:36 ?12次下載
    Keil5創建51<b class='flag-5'>單片機</b><b class='flag-5'>項目中</b>CPU顯示為空

    單片機控制調試信息輸出的方法

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

    單片機項目中LED的重要性~

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

    單片機解密方法

    單片機解密又叫單片機破解,芯片解密,IC解密,但是這嚴格說來這幾種稱呼都不科學,但已經成 了習慣叫法,我們把CPLD解密,DSP解密都習慣稱為單片機
    發表于 09-29 11:44 ?1854次閱讀

    單片機常用的調試方法

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

    51單片機串口配置方法

    串口,作為單片機程序開發中最常用、最方便,也是應用最廣泛的程序調試方法;無論是作為調試工具,打印出調試信息,還是對功能模塊進行通信,串口是每
    的頭像 發表于 04-14 14:58 ?5272次閱讀
    51<b class='flag-5'>單片機</b>串口配置<b class='flag-5'>方法</b>

    單片機開發調試工具有哪些?

    單片機調試是一個有條不紊的過程,用于查找和減少單片機程序中的錯誤數量,使其按預期工作。有時候,單片機程序調試很困難,因為某一個系統模塊中的
    的頭像 發表于 07-07 12:29 ?1591次閱讀

    單片機項目中LED的重要性

    單片機項目中LED的重要性
    的頭像 發表于 09-18 16:19 ?919次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>項目中</b>LED的重要性
    主站蜘蛛池模板: 久久re视频这里精品免费1| 欧美日韩国产码在线| 全部免费特黄特色大片看片| 真实处破女全过程完免费观看| 极品 女神校花 露脸91| 亚洲蜜桃AV永久无码精品放毛片| 国产原创中文视频| 香蕉精品国产自在现线拍| 国产精品人妻午夜福利| 先锋影音av资源站av| 国产亚洲视频在线| 一级毛片直接看| 老阿姨儿子一二三区| 99久久爱re热6在线播放| 暖暖的高清视频在线观看免费中文| 97人人爽人人爽人人人片AV| 女人久久WWW免费人成看片| 差差差差差差差差免费观看| 人妻中文字幕无码久久AV爆| 国产成人精品男人免费| 亚洲黄色免费在线观看| 久久爽狠狠添AV激情五月| 97成人在线视频| 日本人娇小hd| 国产欧美精品一区二区色综合 | 好湿好滑好硬好爽好深视频| 亚洲成人在线免费| 久久精品电影久久电影大全| 91羞羞视频| 三级成人电彭| 狠狠国产欧美在线视频| 在线高清电影理论片4399| 免费国产午夜理论不卡| 被窝伦理午夜电影网| 亚洲高清在线视频| 米奇在线8888在线精品视频| 成人在线免费观看| 亚洲电影网址| 奶大B紧17p| 国产区免费在线观看| 综合久久伊人|