久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2225|回復: 1
打印 上一主題 下一主題
收起左側

STM32單片機煙霧檢測,報警系統程序已完成調試,僅供參考

[復制鏈接]
跳轉到指定樓層
樓主
ID:898452 發表于 2022-6-14 16:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32,煙霧檢測,報警系統,程序已完成調試,可以直接使用

單片機源程序如下:
  1. #include "main.h"
  2. #include "stm32f1xx_hal.h"

  3. /* USER CODE BEGIN Includes */
  4. #include "STM32_LCD1602.h"
  5. #include "DS18B20.h"

  6. /* USER CODE END Includes */

  7. /* Private variables ---------------------------------------------------------*/
  8. ADC_HandleTypeDef hadc1;

  9. TIM_HandleTypeDef htim3;

  10. /* USER CODE BEGIN PV */
  11. /* Private variables ---------------------------------------------------------*/
  12. //下面定義按鍵部分
  13. #define Key1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_13)
  14. #define Key2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14)
  15. #define Key3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15)

  16. unsigned char Key1_flag=0;
  17. unsigned char Key2_flag=0;
  18. unsigned char Key3_flag=0;

  19. unsigned char sec1=0;
  20. unsigned char sec2=0;

  21. //下面定義水泵,指示燈,蜂鳴器
  22. #define SB_0   HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET)
  23. #define SB_1   HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET)

  24. #define LED0_0 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_RESET)
  25. #define LED0_1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_11,GPIO_PIN_SET)

  26. #define LED1_0 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET)
  27. #define LED1_1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET)

  28. #define Beep_0 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET)
  29. #define Beep_1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET)
  30. unsigned char beep1=0;

  31. //下面定義一些變量,用作煙霧
  32. unsigned char YW_H=0;
  33. unsigned char YW=0;

  34. //下面定義關于顯示
  35. unsigned char State=0;
  36. unsigned char s0=0;

  37. //下面定義關于存儲的
  38. unsigned char memory_flag=1;

  39. //下面定義關于AD檢測的
  40. unsigned int adcBuf[5];
  41. unsigned char Read_ADC;

  42. //下面定義關于定時器的
  43. unsigned int Time3_ms=0;

  44. //下面定義關于溫度部分
  45. unsigned char Read_DS18B20=1;
  46. int DS18B20_Temp=0;
  47. int DS18B20_Temp_flsh=0;      //出現一種情況,水泵工作的時候,18B20會重啟一次,楊說,不讓突變,突變數據不刷新
  48. unsigned char DS18B20_Temp_H=0;
  49. unsigned char DS18B20_Temp_flag=0;


  50.   
  51. /* USER CODE END PV */

  52. /* Private function prototypes -----------------------------------------------*/
  53. void SystemClock_Config(void);
  54. static void MX_GPIO_Init(void);
  55. static void MX_ADC1_Init(void);
  56. static void MX_TIM3_Init(void);

  57. /* USER CODE BEGIN PFP */
  58. /* Private function prototypes -----------------------------------------------*/

  59. /* USER CODE END PFP */

  60. /* USER CODE BEGIN 0 */

  61. void Write_flsh_byte(uint32_t EEPROM_ADD,uint32_t EEPROM_Data)
  62. {
  63.     //1、解鎖FLASH
  64.     HAL_FLASH_Unlock();
  65.     //2、擦除FLASH
  66.     //初始化FLASH_EraseInitTypeDef
  67.     FLASH_EraseInitTypeDef f;
  68.     f.TypeErase = FLASH_TYPEERASE_PAGES;
  69.     f.PageAddress = EEPROM_ADD;
  70.     f.NbPages = 1;
  71.     //設置PageError
  72.     uint32_t PageError = 0;
  73.     //調用擦除函數
  74.     HAL_FLASHEx_Erase(&f, &PageError);
  75.     //3、對FLASH燒寫
  76.     HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, EEPROM_ADD, EEPROM_Data);
  77.     //4、鎖住FLASH
  78.     HAL_FLASH_Lock();
  79. }

  80. //FLASH讀取數據測試
  81. uint32_t readFlash(uint32_t EEPROM_ADD)
  82. {
  83.   uint32_t temp = *(__IO uint32_t*)(EEPROM_ADD);
  84.   return temp;
  85. }

  86. void memory()
  87. {
  88.   if(memory_flag==1)  
  89.         {
  90.           memory_flag=0;
  91.     Write_flsh_byte(0x0800F000,YW_H);
  92.                 Write_flsh_byte(0x0800E000,DS18B20_Temp_H);
  93.         }
  94. }

  95. void read_memory()
  96. {
  97.   YW_H=readFlash(0x0800F000);
  98.         DS18B20_Temp_H=readFlash(0x0800E000);
  99.         if(YW_H>100) YW_H=20;
  100.   if(DS18B20_Temp_H>100) YW_H=30;
  101.        
  102.        
  103.        
  104. }
  105. void Key_Dispose()  //按鍵處理函數
  106. {
  107.   if(!Key1)  
  108.          {
  109.                  if(Key1_flag)
  110.                  {
  111.                    Key1_flag=0;
  112.                    State=(State+1)%3;
  113.                  }
  114.          }
  115.          else Key1_flag=1;

  116.         if(!Key2)  
  117.          {
  118.                  if(Key2_flag||sec1==0)
  119.                  {
  120.                    Key2_flag=0;
  121.                          switch(State)
  122.                          {
  123.                            case 1:  if(DS18B20_Temp_H<100) DS18B20_Temp_H++;    break;
  124.                                  case 2:  if(YW_H<100) YW_H++;    break;
  125.                          }
  126.                  }
  127.          }
  128.          else
  129.           {
  130.             if(Key2_flag==0)
  131.                   {
  132.                           Key2_flag=1;
  133.                           memory_flag=1;
  134.                   }
  135.                  sec1=2;
  136.           }

  137.   if(!Key3)  
  138.          {
  139.                  if(Key3_flag||sec2==0)
  140.                  {
  141.                    Key3_flag=0;
  142.                          switch(State)
  143.                          {
  144.                            case 1:  if(DS18B20_Temp_H>0) DS18B20_Temp_H-- ;   break;
  145.                                  case 2:  if(YW_H>0)           YW_H--;             break;
  146.                          }
  147.                  }
  148.          }
  149.          else
  150.           {
  151.             if(Key3_flag==0)
  152.                  {
  153.                           Key3_flag=1;
  154.                           memory_flag=1;
  155.                  }
  156.                  sec2=2;
  157.           }
  158. }

  159. void Display()
  160. {
  161.        
  162.         if(State==0)
  163.         {
  164.                
  165.                 LCD1602_write(0,0x80);
  166.                 LCD1602_writebyte((unsigned char *)" Temp:");       
  167.                 LCD1602_write(1,0x30+DS18B20_Temp/100%10);
  168.                 LCD1602_write(1,0x30+DS18B20_Temp/10%10);
  169.                 LCD1602_writebyte((unsigned char *)".");       
  170.                 LCD1602_write(1,0x30+DS18B20_Temp%10);
  171.                 LCD1602_write(1,0xdf);
  172.                 LCD1602_writebyte((unsigned char *)"C     ");       

  173.                 LCD1602_write(0,0xC0);
  174.                 LCD1602_writebyte((unsigned char *)"Smoke:");
  175.                 LCD1602_write(1,0x30+YW/100%10);
  176.                 LCD1602_write(1,0x30+YW/10%10);
  177.                 LCD1602_write(1,0x30+YW%10);
  178.                 LCD1602_writebyte((unsigned char *)"%       ");
  179.                
  180.                
  181.         }
  182.         else
  183.         {
  184.                
  185.                         LCD1602_write(0,0x80);
  186.                         LCD1602_writebyte((unsigned char *)" Temp_H:");
  187.                         if(State==1&&s0==0) LCD1602_writebyte((unsigned char *)"   ");
  188.                         else
  189.                         {  
  190.                                 if(DS18B20_Temp_H>99) LCD1602_write(1,0x30+DS18B20_Temp_H/100%10);
  191.                                 else                  LCD1602_writebyte((unsigned char *)" ");
  192.                                 LCD1602_write(1,0x30+DS18B20_Temp_H/10%10);
  193.                                 LCD1602_write(1,0x30+DS18B20_Temp_H%10);
  194.                         }       
  195.                         LCD1602_write(1,0xdf);
  196.                         LCD1602_writebyte((unsigned char *)"C        ");       
  197.                
  198.                
  199.                         LCD1602_write(0,0xC0);
  200.                         LCD1602_writebyte((unsigned char *)"Smoke_H:");
  201.                         if(State==2&&s0==0) LCD1602_writebyte((unsigned char *)"   ");
  202.                         else
  203.                         {
  204.                                 if(YW_H>99) LCD1602_write(1,0x30+YW_H/100%10);
  205.                                 else        LCD1602_writebyte((unsigned char *)" ");
  206.                                 LCD1602_write(1,0x30+YW_H/10%10);
  207.                                 LCD1602_write(1,0x30+YW_H%10);
  208.                         }       
  209.                         LCD1602_writebyte((unsigned char *)"%       ");
  210.         }
  211. }
  212. void Get_ADC()
  213. {
  214.         if(Read_ADC==1)
  215.         {
  216.           Read_ADC=0;
  217.                 HAL_ADC_Start(&hadc1); //啟動Ad檢測,  MQ-2,能將檢測到的煙霧量化成  0-5V電壓數據輸出,這里最終轉化成百分比輸出
  218.                 HAL_ADC_PollForConversion(&hadc1,0xffff); //等待檢測結束
  219. //        YW=(HAL_ADC_GetValue(&hadc1))/124;  //--->這一句是測試,看從AD值到電壓數據對不對,結果是正確的,結果是精確到小數點后一位的電壓數據
  220. //  就目前電路來說,節點電壓理論最高 2.5V,所以最大AD值應該是         3102.272727272728,所以將 AD值 0 到        3102.272727272728 量化為 0-100   計算得到系數為------> 31.02272727272728
  221.                 YW=(HAL_ADC_GetValue(&hadc1))/31.02272727272728; //AD值除以系數,量化成 0 - 100數據
  222.                 if(YW>=100) YW=100;   //不可能會出現大于100,除非節點電壓大于2.5 ,但是還是過濾一下                             
  223.                 HAL_ADC_Stop(&hadc1); //結束AD檢測
  224.         }
  225. }

  226. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  227. {
  228.      if(htim==&htim3)
  229.       {
  230.         Time3_ms++;
  231.                                 if(Time3_ms % 50 == 0)
  232.                                 {
  233.                                   Key_Dispose();
  234.                                 }       
  235.                                 if(Time3_ms %200 == 0)
  236.                                 {
  237.                                   s0=s0^0x01;   //取反
  238.                                         if(beep1==1)
  239.                                         {
  240.                                           GPIOB->ODR ^= GPIO_PIN_0;  
  241.                                         }
  242.                                         else Beep_0;
  243.                                 }                                               
  244.                                 if(Time3_ms%1000==0)
  245.                                 {
  246.                
  247.                                         if(sec1!=0) sec1--;
  248.                                         if(sec2!=0) sec2--;
  249.                                         Read_ADC=1;
  250.                                
  251.                                 }  
  252.                                 if(Time3_ms>2000)
  253.                                 {
  254.                                                   Time3_ms=0;
  255.                                         Read_DS18B20=1;
  256.                                 }
  257.                                

  258.       }
  259. }


  260. void Police()
  261. {
  262.   if((DS18B20_Temp>=DS18B20_Temp_H*10)||(YW>=YW_H))        beep1=1;
  263.         else beep1=0;

  264.         if(DS18B20_Temp>DS18B20_Temp_H*10)LED0_0;
  265.         else LED0_1;

  266.         if(YW>=YW_H)LED1_0;
  267.         else        LED1_1;
  268.        
  269.   if((DS18B20_Temp>=DS18B20_Temp_H*10)&&(YW>=YW_H))        SB_1;
  270.         else SB_0;

  271. }

  272. /* USER CODE END 0 */

  273. /**
  274.   * @brief  The application entry point.
  275.   *
  276.   * @retval None
  277.   */
  278. int main(void)
  279. {
  280.   /* USER CODE BEGIN 1 */

  281.         int Temp_Error=0;
  282.        
  283.        
  284.   /* USER CODE END 1 */

  285.   /* MCU Configuration----------------------------------------------------------*/

  286.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  287.   HAL_Init();

  288.   /* USER CODE BEGIN Init */

  289.   /* USER CODE END Init */

  290.   /* Configure the system clock */
  291.   SystemClock_Config();

  292.   /* USER CODE BEGIN SysInit */

  293.   /* USER CODE END SysInit */

  294.   /* Initialize all configured peripherals */
  295.   MX_GPIO_Init();
  296.   MX_ADC1_Init();
  297.   MX_TIM3_Init();
  298.   /* USER CODE BEGIN 2 */
  299.         HAL_TIM_Base_Start_IT(&htim3);
  300.   LCD1602_cls();
  301.         read_memory();
  302.         Get_ADC();
  303.         do
  304.         {
  305.           DS18B20_Temp=DS18B20_Get_Temp();
  306.         }while(DS18B20_Temp==850);

  307.        

  308.        
  309.   /* USER CODE END 2 */

  310.   /* Infinite loop */
  311.   /* USER CODE BEGIN WHILE */
  312.   while (1)
  313.   {
  314.   /* USER CODE END WHILE */

  315.   /* USER CODE BEGIN 3 */
  316.                
  317.     Display();
  318.                 memory();
  319.                 Get_ADC();
  320.     Police();
  321.                
  322.                 if(Read_DS18B20==1)
  323.                 {
  324.                   Read_DS18B20=0;
  325.       Temp_Error= DS18B20_Get_Temp();
  326.                         if(Temp_Error!=850)
  327.                         {
  328.                            DS18B20_Temp=Temp_Error;
  329.                         }
  330.                 }
  331.                  
  332.                
  333. //                if(Read_DS18B20==1)
  334. //                {
  335. //                        Read_DS18B20=0;
  336. //                        if(DS18B20_Temp_flag==1)
  337. //                        {
  338. //                          DS18B20_Temp_flag=0;
  339. //                                DS18B20_Temp_flsh =DS18B20_Get_Temp();
  340. //                        }
  341. //                        else
  342. //                        {
  343. //                                DS18B20_Temp_flag=1;
  344. //                          if(DS18B20_Temp_flsh>=DS18B20_Get_Temp())
  345. //                                {
  346. //                                          if(DS18B20_Temp_flsh-DS18B20_Get_Temp()<100)  DS18B20_Temp=DS18B20_Get_Temp();
  347. //                                       
  348. //                                }
  349. //                                else
  350. //                                {
  351. //                                  if(DS18B20_Get_Temp()-DS18B20_Temp_flsh<100)    DS18B20_Temp=DS18B20_Get_Temp();
  352. //                                }
  353. //                        }
  354. //                       
  355. //                }
  356.                
  357.   }
  358.   /* USER CODE END 3 */

  359. }

  360. /**
  361.   * @brief System Clock Configuration
  362.   * @retval None
  363.   */
  364. void SystemClock_Config(void)
  365. {

  366.   RCC_OscInitTypeDef RCC_OscInitStruct;
  367.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  368.   RCC_PeriphCLKInitTypeDef PeriphClkInit;

  369.     /**Initializes the CPU, AHB and APB busses clocks
  370.     */
  371.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  372.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  373.   RCC_OscInitStruct.HSICalibrationValue = 16;
  374.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  375.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
  376.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
  377.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  378.   {
  379.     _Error_Handler(__FILE__, __LINE__);
  380.   }

  381.     /**Initializes the CPU, AHB and APB busses clocks
  382.     */
  383.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  384.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  385.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  386.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  387.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  388.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  389.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  390.   {
  391.     _Error_Handler(__FILE__, __LINE__);
  392.   }

  393.   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  394.   PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
  395.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  396.   {
  397.     _Error_Handler(__FILE__, __LINE__);
  398.   }

  399.     /**Configure the Systick interrupt time
  400.     */
  401.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  402.     /**Configure the Systick
  403.     */
  404.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  405.   /* SysTick_IRQn interrupt configuration */
  406.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  407. }

  408. /* ADC1 init function */
  409. static void MX_ADC1_Init(void)
  410. {

  411.   ADC_ChannelConfTypeDef sConfig;

  412.     /**Common config
  413.     */
  414.   hadc1.Instance = ADC1;
  415.   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  416.   hadc1.Init.ContinuousConvMode = DISABLE;
  417.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  418.   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  419.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  420.   hadc1.Init.NbrOfConversion = 1;
  421.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  422.   {
  423.     _Error_Handler(__FILE__, __LINE__);
  424.   }

  425.     /**Configure Regular Channel
  426.     */
  427.   sConfig.Channel = ADC_CHANNEL_9;
  428.   sConfig.Rank = ADC_REGULAR_RANK_1;
  429.   sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  430.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  431.   {
  432.     _Error_Handler(__FILE__, __LINE__);
  433.   }

  434. }

  435. /* TIM3 init function */
  436. static void MX_TIM3_Init(void)
  437. {

  438.   TIM_ClockConfigTypeDef sClockSourceConfig;
  439.   TIM_MasterConfigTypeDef sMasterConfig;

  440.   htim3.Instance = TIM3;
  441.   htim3.Init.Prescaler = 63;
  442.   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  443.   htim3.Init.Period = 1000;
  444.   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  445.   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  446.   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  447.   {
  448.     _Error_Handler(__FILE__, __LINE__);
  449.   }

  450.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  451.   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  452.   {
  453.     _Error_Handler(__FILE__, __LINE__);
  454.   }

  455.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  456.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  457.   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  458.   {
  459.     _Error_Handler(__FILE__, __LINE__);
  460.   }

  461. }

  462. /** Configure pins as
  463.         * Analog
  464.         * Input
  465.         * Output
  466.         * EVENT_OUT
  467.         * EXTI
  468. */
  469. static void MX_GPIO_Init(void)
  470. {

  471.   GPIO_InitTypeDef GPIO_InitStruct;

  472.   /* GPIO Ports Clock Enable */
  473.   __HAL_RCC_GPIOB_CLK_ENABLE();
  474.   __HAL_RCC_GPIOA_CLK_ENABLE();

  475.   /*Configure GPIO pin Output Level */
  476.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_RESET);

  477.   /*Configure GPIO pins : PB0 PB10 PB11 PB12 */
  478.   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
  479.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  480.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  481.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  482.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  483.   /*Configure GPIO pins : PB13 PB14 PB15 */
  484.   GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  485.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  486.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  487.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  488. }

  489. /* USER CODE BEGIN 4 */

  490. /* USER CODE END 4 */

  491. /**
  492.   * @brief  This function is executed in case of error occurrence.
  493.   * @param  file: The file name as string.
  494.   * @param  line: The line in file as a number.
  495.   * @retval None
  496.   */
  497. void _Error_Handler(char *file, int line)
  498. {
  499.   /* USER CODE BEGIN Error_Handler_Debug */
  500.   /* User can add his own implementation to report the HAL error return state */
  501.   while(1)
  502.   {
  503.   }
  504.   /* USER CODE END Error_Handler_Debug */
  505. }

  506. #ifdef  USE_FULL_ASSERT
  507. /**
  508.   * @brief  Reports the name of the source file and the source line number
  509.   *         where the assert_param error has occurred.
  510.   * @param  file: pointer to the source file name
  511.   * @param  line: assert_param error line source number
  512.   * @retval None
  513.   */
  514. void assert_failed(uint8_t* file, uint32_t line)
  515. {
  516.   /* USER CODE BEGIN 6 */
  517.   /* User can add his own implementation to report the file name and line number,
  518.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  519.   /* USER CODE END 6 */
  520. }
  521. #endif /* USE_FULL_ASSERT */

  522. /**
  523.   * @}
  524.   */

  525. /**
  526.   * @}
  527.   */
復制代碼

Keil代碼下載: 代碼.7z (2.91 MB, 下載次數: 22)

評分

參與人數 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1024371 發表于 2022-6-15 08:39 | 只看該作者
如果展示一些文字和圖片應該更好
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区三区在线播放 | 午夜性视频 | 亚洲综合网站 | 免费在线成人网 | 一级片在线视频 | 国产精品欧美一区二区 | 亚洲免费在线观看 | 中文字幕一区二区三区精彩视频 | 精精国产xxxx视频在线播放 | 一级欧美| 欧美黄色一区 | 福利一区二区 | 色精品视频 | 久久夜夜| 亚洲国产精品99久久久久久久久 | 日本一二三区在线观看 | 国产日韩一区二区 | www.99re| 亚洲三区视频 | 久久精品成人 | 国产精品国产成人国产三级 | 中文字幕高清 | 久久国产精品精品 | 一区二区三区高清在线观看 | 国产精品一区一区三区 | 91欧美激情一区二区三区成人 | 欧美综合久久 | 午夜影院中文字幕 | 精品国产高清一区二区三区 | 国产在线精品一区二区三区 | 精品国产精品国产偷麻豆 | 水蜜桃久久夜色精品一区 | 麻豆久久久久久久久久 | 国产精品自在线 | 成年人在线视频 | 午夜国产一区 | 成人伊人 | 国产精品久久久久久久久久久免费看 | 欧美精品久久久久 | 日韩一二三区视频 | 天天操天天摸天天干 |