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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

py32f030k28單片機開發板NTC溫度顯示代碼

[復制鏈接]
跳轉到指定樓層
樓主
普冉的M0系列MCU PY32F030K28自帶的LED數碼管驅動,省去了外部驅動IC。本例程演示通過模擬輸入PA7引腳采集NTC(熱敏電阻)電壓計算對應溫度并驅動四位LED數碼管顯示。

  1. /**
  2. ******************************************************************************
  3. * 文件名程: main.c
  4. * 作    者: 鄧凱哥
  5. * 功    能: 主函數
  6. * 硬    件: PY32F030K28-StartKit-V0.1
  7. * 軟件版本 V0.0.1(2024/4/16 16:02)
  8. ******************************************************************************
  9. **/
  10. #include "main.h"
  11. #include "ntc.h"
  12. #include "timepare.h"

  13. #define LED_DISP_c              0x61        //溫度符號小c

  14. /* Private variables ---------------------------------------------------------*/

  15. const uint8_t dispArr[] = {LL_LED_DISP_0, LL_LED_DISP_1, LL_LED_DISP_2, LL_LED_DISP_3, LL_LED_DISP_4, \
  16.                            LL_LED_DISP_5, LL_LED_DISP_6, LL_LED_DISP_7, LL_LED_DISP_8, LL_LED_DISP_9
  17.                           };

  18. int32_t acc_adcval,mean_value;
  19. uint32_t ADC1_Datas[128];
  20. int16_t ADC_ConverDone,adc_count,tempval;
  21. /* Private user code ---------------------------------------------------------*/
  22. /* Private macro -------------------------------------------------------------*/
  23. /* Private function prototypes -----------------------------------------------*/
  24. static void APP_SystemClockConfig(void);
  25. static void APP_AdcConfig(void);
  26. static void APP_AdcEnable(void);
  27. static void APP_AdcCalibrate(void);
  28. static void APP_ConfigLed(void);
  29. static void ADC1_DMA_Config(void);
  30. static void APP_ConfigUsart1(void);

  31. /******************************************************************************
  32. **函數信息 :System_Tick(uint32_t Ticks)           
  33. **功能描述 :系統嘀嗒時鐘配置
  34. **輸入參數 :Ticks 頻率
  35. **輸出參數 :無
  36. **說    明 :
  37. ******************************************************************************/                                                  
  38. void System_Tick(uint32_t Ticks)
  39. {
  40.   SysTick->LOAD  = (uint32_t)((SystemCoreClock / Ticks) - 1UL);          /* set reload register */
  41.   SysTick->VAL   = 0UL;                                                       /* Load the SysTick Counter Value */
  42.   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
  43.                                    SysTick_CTRL_TICKINT_Msk   |
  44.                    SysTick_CTRL_ENABLE_Msk;                                   /* Enable the Systick Timer */
  45. }

  46. /******************************************************************************
  47. **函數信息 :fputc( int data, FILE *f )                  
  48. **功能描述 :重定向fputc函數
  49. **輸入參數 :data  要打印字符 , *f  文件指針
  50. **輸出參數 :無
  51. **說    明 :
  52. ******************************************************************************/
  53. struct __FILE
  54. {
  55.         int handle;
  56. };

  57. FILE __stdout;

  58. int fputc(int data, FILE *f)
  59. {
  60.   /* Send a byte to USART */
  61.   LL_USART_TransmitData8(USART1, data);
  62.   while (!LL_USART_IsActiveFlag_TC(USART1));
  63.   LL_USART_ClearFlag_TC(USART1);

  64.   return (data);
  65. }

  66. /**
  67.   * @brief  應用程序入口函數.
  68.   * @retval int
  69.   */
  70. int main(void)
  71. {
  72.         /* 配置系統時鐘 */
  73.         APP_SystemClockConfig();
  74.         
  75.         /* 配置USART1相關參數 */
  76.         APP_ConfigUsart1();
  77.         
  78.         /* ADC復位 */
  79.         LL_ADC_Reset(ADC1);

  80.         /* ADC模塊時鐘使能 */
  81.         LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_ADC1);

  82.         /* ADC校準 */
  83.         APP_AdcCalibrate();

  84.         /* 配置ADC相關參數 */
  85.         APP_AdcConfig();
  86.         
  87.         /* 配置ADC DMA參數 */
  88.         ADC1_DMA_Config();
  89.         
  90.         /* 配置LED相關參數 */
  91.         APP_ConfigLed();

  92.         /* 使能ADC */
  93.         APP_AdcEnable();

  94.         /* 開始ADC轉換(如果是軟件觸發則直接開始轉換) */
  95.         LL_ADC_REG_StartConversion(ADC1);
  96.         
  97.         /* 開啟系統嘀嗒定時器 */
  98.         System_Tick(1000);
  99.         while (1)
  100.         {
  101.         
  102.                 if( TimePare.Tim1ms_flag == 1 )                //1ms任務
  103.                 {
  104.                         TimePare.Tim1ms_flag = 0;
  105.                         if( ++TimePare.Tim10ms_count >= 10 )
  106.                         {
  107.                                 TimePare.Tim10ms_count = 0;
  108.                                 TimePare.Tim10ms_flag = 1;
  109.                         }
  110.                         
  111.                         if( ++TimePare.Tim50ms_count >= 50 )
  112.                         {
  113.                                 TimePare.Tim50ms_count = 0;
  114.                                 TimePare.Tim50ms_flag = 1;
  115.                         }
  116.                 }
  117.                
  118.                
  119.                
  120.                 if( TimePare.Tim10ms_flag == 1 )        //10ms 任務
  121.                 {               
  122.                         
  123.                         TimePare.Tim10ms_flag = 0;
  124.                         if( ++TimePare.Tim100ms_count >= 10 )
  125.                         {
  126.                                 TimePare.Tim100ms_count = 0;
  127.                                 TimePare.Tim100ms_flag = 1;
  128.                         }
  129.                         
  130.                         if( ++TimePare.Tim200ms_count >= 20 )
  131.                         {
  132.                                 TimePare.Tim200ms_count = 0;
  133.                                 TimePare.Tim200ms_flag = 1;
  134.                         }
  135.                 }
  136.                
  137.                
  138.                 if( TimePare.Tim50ms_flag == 1 )        //50ms 任務
  139.                 {
  140.                         
  141.                         TimePare.Tim50ms_flag = 0;
  142.                 }
  143.                
  144.                 if( TimePare.Tim100ms_flag == 1 )        //100ms 任務
  145.                 {
  146.                         
  147.                         TimePare.Tim100ms_flag = 0;
  148.                         if( ++TimePare.Tim500ms_count >= 5 )
  149.                         {
  150.                                 TimePare.Tim500ms_count = 0;
  151.                                 TimePare.Tim500ms_flag = 1;
  152.                         }
  153.                 }
  154.                
  155.                 if( TimePare.Tim200ms_flag == 1 )        //200ms 任務
  156.                 {
  157.                         TimePare.Tim200ms_flag = 0;
  158.                 }
  159.                
  160.                 if( TimePare.Tim500ms_flag == 1 )        //500ms 任務
  161.                 {
  162.                         ///顯示NTC溫度
  163. //                        LL_LED_SetDisplayValue(LED, LL_LED_COM0, dispArr[(tempval) /100]);
  164.                         LL_LED_SetDisplayValue(LED, LL_LED_COM1, dispArr[(tempval) %100/10]);
  165.                         LL_LED_SetDisplayValue(LED, LL_LED_COM2, dispArr[(tempval) %100%10]);
  166.                         LL_LED_SetDisplayValue(LED, LL_LED_COM3, LED_DISP_c);
  167.                         
  168.                         printf("ADC_VALUE = %d,   NTC_VALUE = %d\r\n",mean_value, tempval);          //串口打印ADC數值和NTC溫度值
  169.                         
  170.                         TimePare.Tim500ms_flag = 0;
  171.                         if( ++TimePare.Tim1s_count >= 2 )
  172.                         {
  173.                                 TimePare.Tim1s_count = 0;
  174.                                 TimePare.Tim1s_flag = 1;
  175.                         }
  176.                 }
  177.                
  178.                 if( TimePare.Tim1s_flag == 1 )                //1000ms 任務
  179.                 {
  180.                         TimePare.Tim1s_flag = 0;
  181.                 }

  182.         }
  183. }


  184. /**
  185.   * @brief  系統時鐘配置函數
  186.   * @param  無
  187.   * @retval 無
  188.   */
  189. static void APP_SystemClockConfig(void)
  190. {
  191.         /* 使能HSI */
  192.         LL_RCC_HSI_Enable();
  193.         LL_RCC_HSI_SetCalibFreq(LL_RCC_HSICALIBRATION_24MHz);
  194.         while(LL_RCC_HSI_IsReady() != 1)
  195.         {
  196.         }

  197.         /* 設置 AHB 分頻*/
  198.         LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);

  199.         /* 配置HSISYS作為系統時鐘源 */
  200.         LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSISYS);
  201.         while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSISYS)
  202.         {
  203.         }

  204.         /* 設置 APB1 分頻*/
  205.         LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
  206.         LL_Init1msTick(24000000);

  207.         /* 更新系統時鐘全局變量SystemCoreClock(也可以通過調用SystemCoreClockUpdate函數更新) */
  208.         LL_SetSystemCoreClock(24000000);
  209. }

  210. /**
  211.   * @brief  USART配置函數
  212.   * @param  USARTx:USART模塊,可以是USART1、USART2
  213.   * @retval 無
  214.   */
  215. static void APP_ConfigUsart1(void)
  216. {
  217.         /*使能GPIOA時鐘*/
  218.         LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
  219.         /*使能USART1時鐘*/
  220.         LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_USART1);

  221.         /*GPIOA配置*/
  222.         LL_GPIO_InitTypeDef GPIO_InitStruct;
  223.         /*選擇PA9引腳*/
  224.         GPIO_InitStruct.Pin = LL_GPIO_PIN_9;
  225.         /*選擇復用模式*/
  226.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  227.         /*選擇輸出速度*/
  228.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  229.         /*選擇輸出模式*/
  230.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  231.         /*選擇上拉*/
  232.         GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  233.         /*復用為USART1功能*/
  234.         GPIO_InitStruct.Alternate = LL_GPIO_AF1_USART1;
  235.         /*GPIOA初始化*/
  236.         LL_GPIO_Init(GPIOA,&GPIO_InitStruct);

  237.         /*選擇PA10引腳*/
  238.         GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
  239.         /*復用為USART1功能*/
  240.         GPIO_InitStruct.Alternate = LL_GPIO_AF1_USART1;
  241.         /*GPIOA初始化*/
  242.         LL_GPIO_Init(GPIOA,&GPIO_InitStruct);

  243.         /*配置USART功能*/
  244.         LL_USART_InitTypeDef USART_InitStruct;
  245.         /*設置波特率*/
  246.         USART_InitStruct.BaudRate = 9600;
  247.         /*設置數據長度*/
  248.         USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
  249.         /*停止位*/
  250.         USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
  251.         /*設置校驗位*/
  252.         USART_InitStruct.Parity = LL_USART_PARITY_NONE;
  253.         USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
  254.         USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
  255.         USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
  256.         /*USART1初始化*/
  257.         LL_USART_Init(USART1, &USART_InitStruct);

  258.         /*配置為全雙工異步模式*/
  259.         LL_USART_ConfigAsyncMode(USART1);

  260.         /*使能UART1模塊*/
  261.         LL_USART_Enable(USART1);
  262. }

  263. /**
  264.   * @brief  ADC校準函數
  265.   * @param  無
  266.   * @retval 無
  267.   */
  268. static void APP_AdcCalibrate(void)
  269. {
  270.   __IO uint32_t wait_loop_index = 0;
  271.   __IO uint32_t backup_setting_adc_dma_transfer = 0;
  272. #if (USE_TIMEOUT == 1)
  273.   uint32_t Timeout = 0;
  274. #endif

  275.   if (LL_ADC_IsEnabled(ADC1) == 0)
  276.   {
  277.     /* 校準時關閉ADC的DMA配置 */
  278.     backup_setting_adc_dma_transfer = LL_ADC_REG_GetDMATransfer(ADC1);
  279.     LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_NONE);
  280.     /* 使能校準 */
  281.     LL_ADC_StartCalibration(ADC1);

  282. #if (USE_TIMEOUT == 1)
  283.     Timeout = ADC_CALIBRATION_TIMEOUT_MS;
  284. #endif

  285.     while (LL_ADC_IsCalibrationOnGoing(ADC1) != 0)
  286.     {
  287. #if (USE_TIMEOUT == 1)
  288.       /* 檢測校準是否超時 */
  289.       if (LL_SYSTICK_IsActiveCounterFlag())
  290.       {
  291.         if(Timeout-- == 0)
  292.         {

  293.         }
  294.       }
  295. #endif
  296.     }

  297.     /* ADC校準結束和使能ADC之間的延時最低4個ADC Clock */
  298.     LL_mDelay(1);

  299.     /* 還原ADC的DMA配置 */
  300.     LL_ADC_REG_SetDMATransfer(ADC1, backup_setting_adc_dma_transfer);
  301.   }
  302. }

  303. /**
  304.   * @brief  ADC配置函數
  305.   * @param  無
  306.   * @retval 無
  307.   */
  308. static void APP_AdcConfig(void)
  309. {
  310.         /* 使能GPIOA時鐘 */
  311.         LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);

  312.         /* 配置管腳PA7為模擬輸入 */
  313.         LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_7, LL_GPIO_MODE_ANALOG);

  314.         /* ADC通道和時鐘源需在ADEN=0時配置,其余的需在ADSTART=0時配置 */
  315.         /* 配置內部轉換通道 */
  316.         LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(ADC1), LL_ADC_PATH_INTERNAL_NONE);

  317.         /* 設置ADC時鐘 */
  318.         LL_ADC_SetClock(ADC1, LL_ADC_CLOCK_SYNC_PCLK_DIV2);

  319.         /* 設置12位分辨率 */
  320.         LL_ADC_SetResolution(ADC1, LL_ADC_RESOLUTION_12B);

  321.         /* 設置數據右對齊 */
  322.         LL_ADC_SetResolution(ADC1, LL_ADC_DATA_ALIGN_RIGHT);

  323.         /* 設置低功耗模式無 */
  324.         LL_ADC_SetLowPowerMode(ADC1, LL_ADC_LP_MODE_NONE);

  325.         /* 設置通道轉換時間 */
  326.         LL_ADC_SetSamplingTimeCommonChannels(ADC1, LL_ADC_SAMPLINGTIME_239CYCLES_5);

  327.         /* 設置觸發源為Software */
  328.         LL_ADC_REG_SetTriggerSource(ADC1, LL_ADC_REG_TRIG_SOFTWARE);

  329.         /* 設置轉換模式為連續轉換 */
  330.         LL_ADC_REG_SetContinuousMode(ADC1, LL_ADC_REG_CONV_CONTINUOUS);

  331.         /* 設置DMA模式為循環 */
  332.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);

  333.         /* 設置過載管理模式為覆蓋上一個值 */
  334.         LL_ADC_REG_SetOverrun(ADC1, LL_ADC_REG_OVR_DATA_OVERWRITTEN);

  335.         /* 使用PA7  ADC通道7,掃描方向必須為向上 */
  336.         LL_ADC_REG_SetSequencerScanDirection(ADC1,LL_ADC_REG_SEQ_SCAN_DIR_FORWARD);

  337.         /* 設置非連續模式為不使能 */
  338.         LL_ADC_REG_SetSequencerDiscont(ADC1, LL_ADC_REG_SEQ_DISCONT_DISABLE);

  339.         /* 設置通道7為轉換通道 */
  340.         LL_ADC_REG_SetSequencerChannels(ADC1,LL_ADC_CHANNEL_7);

  341. }

  342. /**
  343.   * @brief  ADC使能函數
  344.   * @param  無
  345.   * @retval 無
  346.   */
  347. static void APP_AdcEnable(void)
  348. {
  349.   /* 使能ADC */
  350.   LL_ADC_Enable(ADC1);

  351.   /* 使能ADC 穩定時間,最低8個ADC Clock */
  352.   LL_mDelay(1);
  353. }


  354. /**
  355.   * @brief  配置LED數碼管
  356.   * @param  無
  357.   * @retval 無
  358.   */
  359. static void APP_ConfigLed(void)
  360. {
  361.         /* 使能時鐘 */
  362.         LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LED);
  363.         LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
  364.         LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);

  365.         LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  366.         /* 配置 PB3, PB4, PB5 為 com1 com2 com3 */
  367.         GPIO_InitStruct.Pin = LL_GPIO_PIN_3 | LL_GPIO_PIN_4 | LL_GPIO_PIN_5;
  368.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  369.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  370.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  371.         GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  372.         GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
  373.         LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  374.         /* 配置 PA15 為 com0 */
  375.         GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
  376.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  377.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  378.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  379.         GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  380.         GPIO_InitStruct.Alternate = LL_GPIO_AF_6;
  381.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  382.         /* 配置 PA0, PA1, PA2, PA3, PA4, PA5, PA6 為 SEG B C D E F G DP */
  383.         GPIO_InitStruct.Pin = LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3 | \
  384.                                                 LL_GPIO_PIN_4 | LL_GPIO_PIN_5 | LL_GPIO_PIN_6;
  385.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  386.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  387.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  388.         GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  389.         GPIO_InitStruct.Alternate = LL_GPIO_AF_3;
  390.         LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  391.         /* 配置 PB8 為 SEG A */
  392.         GPIO_InitStruct.Pin = LL_GPIO_PIN_8;
  393.         GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  394.         GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  395.         GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  396.         GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
  397.         GPIO_InitStruct.Alternate = LL_GPIO_AF_3;
  398.         LL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  399.         /* 設置 LED COM 驅動能力 */
  400.         LL_LED_SetComDrive(LED, LL_LED_COMDRIVE_LOW);

  401.         /* 設置 COM 打開數 */
  402.         LL_LED_SetComNum(LED, LL_LED_COMSELECT_4COM);

  403.         /* 設置 LED 預分頻值 */
  404.         LL_LED_SetPrescaler(LED, 9);

  405.         /* 設置 LED 點亮和切換時間 */
  406.         LL_LED_SetLightAndDeadTime(LED, 0xf0, 0x10);

  407.         /* 使能 LED */
  408.         LL_LED_Enable(LED);
  409. }

  410. /******************************************************************************
  411. **函數信息 : ADC1_DMA_Config(void)               
  412. **功能描述 :ADC1 DMA通道配置
  413. **輸入參數 :無
  414. **輸出參數 :無
  415. **說    明 :
  416. ******************************************************************************/
  417. void ADC1_DMA_Config()
  418. {
  419.   /* 使能DMA1 時鐘 */
  420.   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);

  421.   /* 使能syscfg 時鐘 */
  422.   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG);

  423.   /* ADC對應通道LL_DMA_CHANNEL_1 */
  424.   SET_BIT(SYSCFG->CFGR3, 0x0);

  425.   /* 配置DMA傳輸方向為外設到存儲器 */
  426.   LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);

  427.   /* 配置DMA優先級為高 */
  428.   LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);

  429.   /* 配置DMA循環模式 */
  430.   LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_CIRCULAR);

  431.   /* 配置DMA外設地址不變模式 */
  432.   LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);

  433.   /* 配置DMA存儲地址自增模式 */
  434.   LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);

  435.   /* 配置DMA外設傳輸方式為字 */
  436.   LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_WORD);

  437.   /* 配置DMA存儲器傳輸方式為字 */
  438.   LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_WORD);

  439.   /* 配置DMA傳輸長度為128 */
  440.   LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 128);

  441.   /* 配置DMA外設和存儲器的地址 */
  442.   LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1, (uint32_t)&ADC1->DR,\
  443.                          (uint32_t)ADC1_Datas, LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));

  444.   /* 使能DMA傳輸完成中斷 */
  445.   LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);

  446.   /* DMA中斷配置 */
  447.   NVIC_SetPriority(DMA1_Channel1_IRQn, 0);
  448.   NVIC_EnableIRQ(DMA1_Channel1_IRQn);

  449.   /* 使能DMA */
  450.   LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
  451. }
  452. /******************************************************************************
  453. **函數信息 : ADC_DMATransferCompleteCallback(void)               
  454. **功能描述 :ADC中斷回調
  455. **輸入參數 :無
  456. **輸出參數 :無
  457. **說    明 :
  458. ******************************************************************************/
  459. void ADC_DMATransferCompleteCallback()
  460. {
  461.         uint8_t i;
  462.         acc_adcval = 0;
  463.         for( i=0; i<128; i++)
  464.         {
  465.                 acc_adcval += ADC1_Datas[i];
  466.         }
  467.         mean_value = acc_adcval >>7;                //求128次ADC采樣的平均值,用移位比除法運算更高效
  468.         tempval =  ADC_Get_TempValue( mean_value);
  469. }

  470. /**
  471.   * @brief  錯誤執行函數
  472.   * @param  無
  473.   * @retval 無
  474.   */
  475. void APP_ErrorHandler(void)
  476. {
  477.   /* 無限循環 */
  478.   while (1)
  479.   {
  480.   }
  481. }

  482. #ifdef  USE_FULL_ASSERT
  483. /**
  484.   * @brief  輸出產生斷言錯誤的源文件名及行號
  485.   * @param  file:源文件名指針
  486.   * @param  line:發生斷言錯誤的行號
  487.   * @retval 無
  488.   */
  489. void assert_failed(uint8_t *file, uint32_t line)
  490. {
  491.   /* 用戶可以根據需要添加自己的打印信息,
  492.      例如: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  493.   /* 無限循環 */
  494.   while (1)
  495.   {
  496.   }
  497. }
  498. #endif /* USE_FULL_ASSERT */
復制代碼


代碼下載:

PCB_PCB_PY32F030K2_KFB_V0.2_2024-04-28.pdf

112.85 KB, 下載次數: 8, 下載積分: 黑幣 -5

PY32F030K2開發板NTC源碼.7z

1.09 MB, 下載次數: 16, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰人人91| 一级毛片在线播放 | 国产日韩久久 | 国产黄色在线 | 美女爽到呻吟久久久久 | 亚洲一区二区精品视频在线观看 | 国产在线精品一区二区三区 | 国产精品永久在线观看 | 日日拍夜夜 | 国内精品久久久久久 | 色先锋影音 | 成人在线免费观看视频 | 精品1区 | 久久国产成人精品国产成人亚洲 | 91视视频在线观看入口直接观看 | 国产一区欧美一区 | 亚洲激情在线观看 | 久久久久一区二区三区四区 | 精精国产xxxx视频在线播放7 | 中文字幕av中文字幕 | 久久久久久高潮国产精品视 | 久久久精品一区二区 | 免费精品| 欧美日韩a| 国产精品久久久久久久久久尿 | 91私密视频 | 一级毛片在线播放 | 精品久久久久香蕉网 | 超碰在线观看97 | 精品国产一区二区三区观看不卡 | 精品一区国产 | 国产成人一区二区三区久久久 | 欧美日韩一| 婷婷不卡 | 黑人精品欧美一区二区蜜桃 | 成人免费网视频 | 欧美一区二区三区电影 | 不卡视频在线 | 亚洲精品99 | 在线91 | 视频一区 亚洲 |