Electoday 4.0

ไมโครคอนโทรลเลอร์ => ARM Processors => Topic started by: tha on June 28, 2022, 08:51:00 am

Title: 7 HAL ADC Generic Driver
Post by: tha on June 28, 2022, 08:51:00 am
7   HAL ADC Generic Driver

7.1   ADC Firmware driver registers structures

7.1.1   ADC_InitTypeDef
ADC_InitTypeDef ถูกกหนดใน the stm32f1xx_hal_adc.h
Data Fields
•   uint32_t DataAlign
•   uint32_t ScanConvMode
•   FunctionalState ContinuousConvMode
•   uint32_t NbrOfConversion
•   FunctionalState DiscontinuousConvMode
•   uint32_t NbrOfDiscConversion
•   uint32_t ExternalTrigConv
   
Title: 7 HAL ADC Generic Driver
Post by: tha on June 28, 2022, 09:09:31 am
Field Documentation
•   uint32_t ADC_InitTypeDef::DataAlign
     ระบุ ADC data alignment ไปทางขวาt (MSB บน register bit 11 และ LSB บน register bit 0) (การเซ็ตโดยเริ่มต้น) หรือไปทาง
     ซ้าย (ถ้า regular group: MSB บน register bit 15 และ LSB บน register bit 4, ถ้า injected group (MSB ถูกเก็บเป็นค่า
     เครื่องหมายเนื่องจากค่าลบที่อาจเกิดขึ้นหลังจากการประยุกต์ใช้ออฟเซ็ตแล้ว): MSB บน register bit 14 และ LSB บน register bit 3).
     parameter นี้สามารถเป็นค่าของ ADC_Data_align
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 29, 2022, 08:43:01 am
•   uint32_t ADC_InitTypeDef::ScanConvMode
     กำหนดค่าตัวจัดลำดับของ regular and injected groups. parameter นี้สามารถสัมพันธ์กับ parameter
     'DiscontinuousConvMode' เพื่อให้มี main sequence ถูกแบ่งย่อยเป็นส่วนที่ต่อเนื่องหลายส่วน. ถ้าปิดใช้งาน: การแปลงถูกดำเนิน
     การใน single mode (one channel ที่แปลง, ตัวหนึ่งที่กำหนดใน rank 1). Parameters 'NbrOfConversion' และ
     'InjectedNbrOfConversion' ถูกทิ้ง (เทียบเท่ากับเซ็ตเป็น 1). ถ้าเปิดใช้งาน: Conversions ถูกดำเนินการใน sequence mode
     (หลาย ranks ที่กำหนดโดย 'NbrOfConversion'/'InjectedNbrOfConversion' และแต่ละ channel rank). Scan direction จะ
     ขึ้นสูง: จาก rank1 ถึง rank 'n'. parameter นี้สามารถเป็นค่าของ ADC_Scan_mode โปรดทราบว่า: สำหรับ regular group,
     parameter นี้ควรถูกเปิดใช้งานใน conversion อย่างใดอย่างหนึ่งโดย polling (HAL_ADC_Start ด้วย Discontinuous mode
     และ NbrOfDiscConversion=1) หรือโดย DMA (HAL_ADC_Start_DMA), แต่ไม่ใช่โดย interruption
     (HAL_ADC_Start_IT): ใน scan mode, interruption จะถูกทริกเฉพาะบน the last conversion of the sequence. การแปลง
     ก่อนหน้าทั้งหมดจะถูกเขียนทับโดยการแปลงสุดท้าย. Injected group ที่ใช้พร้อมด้วย scan mode ไม่มีข้อจำกัดนี้: แต่ละ rank มี
     result register ของตัวเอง, ไม่มี data ถูกเขียนทับ.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 29, 2022, 09:13:45 am
•   FunctionalState ADC_InitTypeDef::ContinuousConvMode
     ระบุ่า the conversion ถูกดำเนินการใน single mode (one conversion) หรือ continuous mode สำหรับ regular group, หลัง
     จาก the selected trigger เกิดขึ้น (software start หรือ external trigger). parameter นี้สามารถถูกเซ็ตเป็น ENABLE หรือ
     DISABLE.
•   uint32_t ADC_InitTypeDef::NbrOfConversion
     ระบุ the number of ranks ที่จะถูกแปลงภายใน the regular group sequencer. เพื่อใช้ regular group sequencer และแปลง
     หลาย ranks, parameter 'ScanConvMode' ต้องถูกเปิดใช้งาน. parameter นี้ต้องเป็นจำนนระหว่าง Min_Data = 1 and
     Max_Data = 16.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 29, 2022, 09:35:31 am
•   FunctionalState ADC_InitTypeDef::DiscontinuousConvMode
     ระบุว่า the conversions sequence of regular group ถูกดำเนินการใน Complete-sequence/Discontinuous-sequence
     (main sequence ถูกแบ่งย่อยเป็นส่วนที่ต่อเนื่องหลายส่วน). Discontinuous mode ถูกใช้เฉพาะถ้า sequencer ถูกเปิดใช้งาน
     (parameter 'ScanConvMode'). ถ้า sequencer ถูกปิดใช้งาน, parameter จะถูกทิ้ง. Discontinuous mode สามารถถูกเปิดใช้งาน
     เฉพาะถ้า continuous mode ถูกปิดใช้งาน. ถ้า continuous mode ถูกเปิดใช้งาน, parameter setting นี้จะถูกทิ้ง. parameter นี้
     สามารถถูกเซ็ตเป็น ENABLE or DISABLE.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 29, 2022, 09:57:34 am
•   uint32_t ADC_InitTypeDef::NbrOfDiscConversion
     ระบุ the number of discontinuous conversions ซึ่ง the main sequence of regular group (parameter
     NbrOfConversion) จะถูกแบ่งย่อย. ถ้า parameter 'DiscontinuousConvMode' ถูกปิดใช้งาน, parameter นี้จะถูกทิ้ง.
     parameter นี้ต้องเป็นจำนวนระหว่าง Min_Data = 1 and Max_Data = 8.
•   uint32_t ADC_InitTypeDef::ExternalTrigConv
     เลือก the external event ที่ใช้เพื่อทริก the conversion start of regular group. ถ้าเซ็ตเป็น ADC_SOFTWARE_START,
     external triggers จะถูกปิดใช้งาน. ถ้าเซ็ตเป็น external trigger source, triggering จะอยู่บน event rising edge. parameter นี้
    สามารถเป็นค่าของ ADC_External_trigger_source_Regular
Title: Re: 7 HAL ADC Generic Driver
Post by: moneyp1000 on June 29, 2022, 10:17:44 pm
มาติดตามอ่านอยู่ครับ
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 30, 2022, 07:35:52 am
7.1.2 ADC_ChannelConfTypeDef
ADC_ChannelConfTypeDef ถูกกำหนดใน the stm32f1xx_hal_adc.h
Data Fields
•   uint32_t Channel
•   uint32_t Rank
•   uint32_t SamplingTime


Field Documentation
•   uint32_t ADC_ChannelConfTypeDef::Channel
     ระบุ the channel เพื่อกำหนดค่าลงใน ADC regular group. parameter นี้สามารถเป็น a value of ADC_channels หมายเหตุ:
     ขึ้นอยู่กับ devices, บาง channels อาจไม่มีให้ใช้งานบน package pins. ดูที่ device datasheet สำหรับ channels ที่มีให้ใช้งาน.
     หมายเหตุ: บน STM32F1 devices ที่มีหลาย ADC: เฉพาะ ADC1 สามารถเข้าถึง internal measurement channels
     (VrefInt/TempSensor) หมายเหตุ: บน STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch
     อาจถูกสร้าง (บน ADC input 0) บน the PA0 pin, เมื่อ the ADC กำลังแปลงด้วย injection trigger. ขอแนะนำให้กระจาย the
     analog channels เพื่อให้ Channel 0 ถูกกำหนดค่าเป็น an injected channel. ดูที่ errata sheet ของ devices เหล่านี้สำหรับ
     รายละเอียดเพิ่มเติม.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 30, 2022, 08:21:24 am
•   uint32_t ADC_ChannelConfTypeDef::Rank
     ระบุ the rank ใน the regular group sequencer. parameter นี้สามารถเป็นค่าหนึ่งของ ADC_regular_rank หมายเหตุ: ในกรณี
     จำเป็นต้องปิดใช้งาน a channel หรือเปลี่ยนลำดับของ conversion sequencer, rank ที่บรรจุ a previous channel setting สามารถ
     ถูกเขียนทับโดย the new channel setting (หรือ parameter number ของ conversions สามารถถูกปรับ)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 30, 2022, 08:42:14 am
•   uint32_t ADC_ChannelConfTypeDef::SamplingTime
     Sampling time value ที่ถูกเซ็ตสำหรับ the selected channel. Unit: ADC clock cycles Conversion time เป็นการบวกกันของ
     sampling time และ processing time (12.5 ADC clock cycles ที่ ADC resolution 12 bits). parameter นี้สามารถเป็นค่าหนึ่ง
     ของ ADC_sampling_times ข้อควรระวัง: parameter นี้อัฟเดต the parameter property ของ the channel, ที่สามารถถูกใช้ใน
     regular และ/หรือ injected groups. ถ้า channel เดียวกันนี้ถูกกำหนดค่าไว้ล่วงหน้าในกลุ่มอื่นแล้ว (regular/injected), มันจะ         
     ถูกอัฟเดตเป็น last setting. หมายเหตุ: ในกรณีของการใช้ของ internal measurement channels (VrefInt/TempSensor),
     sampling time constraints ต้องถูกเคารพ (sampling time สามารถถูกปรับใน function of ADC clock frequency และ
     sampling time setting) ดูที่ device datasheet สำหรับ timings values, parameters TS_vrefint, TS_temp (ค่าลำดับ
     คร่าวๆ: 5us ถึง 17.1us ขั้นต่ำ).
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 30, 2022, 10:09:27 am
7.1.3 ADC_AnalogWDGConfTypeDef
ADC_AnalogWDGConfTypeDef ถูกกำหนดใน the stm32f1xx_hal_adc.h
Data Fields
•   uint32_t WatchdogMode
•   uint32_t Channel
•   FunctionalState ITMode
•   uint32_t HighThreshold
•   uint32_t LowThreshold
•   uint32_t WatchdogNumber


Field Documentation
•   uint32_t ADC_AnalogWDGConfTypeDef::WatchdogMode
     กำหนดค่า the ADC analog watchdog mode: single/all channels, regular/injected group. parameter นี้สามารถเป็นค่า
     หนึ่งของ      ADC_analog_watchdog_mode.
•   uint32_t ADC_AnalogWDGConfTypeDef::Channel
     เลือก ADC channel ที่จะมอนิเตอร์โดย analog watchdog. parameter นี้มีผลเฉพาะถ้า watchdog mode ถูกกำหนดค่าใน
     single channel (parameter      WatchdogMode) parameter นี้สามารถเป็นค่าหนึ่งของ ADC_channels.
•   FunctionalState ADC_AnalogWDGConfTypeDef::ITMode
     ระบุว่า the analog watchdog ถูกกำหนดค่าใน interrupt หรือ polling mode. parameter นี้สามารถถูกเซ็ตเป็น ENABLE หรือ
     DISABLE
•   uint32_t ADC_AnalogWDGConfTypeDef::HighThreshold
     กำหนดค่า the ADC analog watchdog High threshold value. parameter ต้องเป็นตัวเลขระหว่าง Min_Data = 0x000 and
     Max_Data = 0xFFF.
•   uint32_t ADC_AnalogWDGConfTypeDef::LowThreshold
     กำหนดค่า the ADC analog watchdog High threshold value. parameter ต้องเป็นตัวเลขระหว่าง Min_Data = 0x000 and
     Max_Data = 0xFFF.
•   uint32_t ADC_AnalogWDGConfTypeDef::WatchdogNumber
     สงวนไว้สำหรับการใช้ในอนาคต, สามารถถูกเซ็ตเป็น 0
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on June 30, 2022, 10:30:09 am
(https://i.imgur.com/KK97J0o.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 01, 2022, 08:51:06 am
7.2 ADC Firmware driver API description

The following section แสดงรายการ the various functions of the ADC library.

7.2.1 ADC peripheral features
•   12-bit resolution
•   Interrupt generation ที่ the end of regular conversion, end of injected conversion, และในกรณีของ analog
     watchdog หรือ overrun events.
•   Single and continuous conversion modes.
•   Scan mode สำหรับ conversion ของหลายชาแนลอย่างมีลำดับ.
•   Data alignment with in-built data coherency.
•   Programmable sampling time (channel wise)
•   ADC conversion of regular group and injected group.
•   External trigger (timer or EXTI) สำหรับทั้ง regular and injected groups.
•   DMA request generation for transfer of conversions data of regular group.
•   Multimode Dual mode (available on devices with 2 ADCs or more).
•   Configurable DMA data storage in Multimode Dual mode (มีให้ใช้งานบน devices ที่มี 2 ADCs หรือมากกว่า).
•   Configurable delay between conversions in Dual interleaved mode (มีให้ใช้งานบน devices ที่มี 2 ADCs หรือมากกว่า).
•   ADC calibration
•   ADC supply requirements: 2.4 V to 3.6 V ที่ full speed และต่ำถึง 1.8 V ที่ slower speed.
•   ADC input range: จาก Vref- (ต่อถึง Vssa) ถึง Vref+ (ต่อถึง Vdda หรือถึง an external voltage reference).
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 02, 2022, 07:30:58 am
7.2.2 How to use this driver

Configuration of top level parameters related to ADC
1.   เปิดใช้งาน the ADC interface
     –   ตามข้อกำหนดเบื้องต้น, ADC clock ต้องถูกกำหนดค่าที่ RCC top level. ข้อควรระวัง: บน STM32F1, ADC clock frequency
          max คือ 14MHz (ดูที่ device datasheet). ดังนั้น, ADC clock prescaler ต้องถูกกำหนดค่าใน function of ADC clock
          source frequency เพื่อให้ยังคงต่ำกว่า maximum frequency นี้.
     –   clock setting หนึ่งรายการคือข้อบังคับ: ADC clock (core clock, อาจเป็น conversion clock ด้วย).
          ◦   ตัวอย่าง: Into HAL_ADC_MspInit() (code location ที่แนะนำ) หรือด้วย device clock parameters configuration
              อื่น:
          ◦   RCC_PeriphCLKInitTypeDef PeriphClkInit;
          ◦   __ADC1_CLK_ENABLE();
          ◦   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
          ◦   PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
          ◦   HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
2.   ADC pins configuration
     –   เปิดใช้งาน the clock สำหรับ the ADC GPIOs โดยใช้ macro __HAL_RCC_GPIOx_CLK_ENABLE()
     –   กำหนดค่า ADC pins เหล่านี้ใน analog mode โดยใช้ function HAL_GPIO_Init()
3.   เป็นทางเลือก, ในกรณีของการใช้ของ ADC พร้อมกับ interruptions:
     –   กำหนดค่า the NVIC for ADC โดยใช้ function HAL_NVIC_EnableIRQ(ADCx_IRQn)
     –   ใส่ the ADC interruption handler function HAL_ADC_IRQHandler() ลงใน the function of corresponding ADC
          interruption vector ADCx_IRQHandler().
4.   เป็นทางเลือก, ในกรณีของการใช้ของ DMA:
     –   กำหนดค่า the DMA (DMA channel, mode normal or circular, ...) โดยใช้ function HAL_DMA_Init().
     –   กำหนดค่า the NVIC สำหรับ DMA โดยใช้ function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)
     –   ใส่ the ADC interruption handler function HAL_ADC_IRQHandler() ลงใน the function of corresponding DMA
          interruption vector DMAx_Channelx_IRQHandler().
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 02, 2022, 08:15:04 am
Configuration of ADC, groups regular/injected, channels parameters
1.   กำหนดค่า the ADC parameters (resolution, data alignment, ...) and regular group parameters (conversion
      trigger, sequencer, ...) โดยใช้ function HAL_ADC_Init().
2.   กำหนดค่า the channels สำหรับ regular group parameters (channel number, channel rank ลงใน sequencer, ...,
      ลงใน regular group) โดยใช้ function HAL_ADC_ConfigChannel().
3.   เป็นทางเลือก, กำหนดค่า the injected group parameters (conversion trigger, sequencer, ..., of injected group) และ
      the channels for injected group parameters (channel number, channel rank into sequencer, ..., into injected
      group) โดยใช้ function HAL_ADCEx_InjectedConfigChannel().
4.   เป็นทางเลือก, กำหนดค่า the analog watchdog parameters (channels monitored, thresholds, ...) โดยใช้ function
      HAL_ADC_AnalogWDGConfig().
5.   เป็นทางเลือก, สำหรับ devices ที่มีหลาย ADC instances: กำหนดค่า the multimode parameters โดยใช้ function
      HAL_ADCEx_MultiModeConfigChannel().
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 02, 2022, 09:10:38 am
Execution of ADC conversions
1.   เป็นทางเลือก, ดำเนินการ an automatic ADC calibration เพื่อปรับ the conversion accuracy ให้ดีขึ้นโดยใช้ function
      HAL_ADCEx_Calibration_Start().
2.   ADC driver สามารถถูกใช้ในหมู่ three modes: polling, interruption, ส่งถ่ายโดย DMA.
      –   ADC conversion by polling:
          ◦   เปิดใช้งาน the ADC peripheral และสตาร์ท conversions โดยใช้ function HAL_ADC_Start()
          ◦   รอสำหรับ ADC conversion completion โดยใช้ function HAL_ADC_PollForConversion() (หรือสำหรับ injected
              group: HAL_ADCEx_InjectedPollForConversion() )
          ◦   ดึง conversion results โดยใช้ function HAL_ADC_GetValue() (หรือสำหรับ injected group:
              HAL_ADCEx_InjectedGetValue() )
          ◦   หยุด conversion และปิดใช้งาน the ADC peripheral โดยใช้ function HAL_ADC_Stop()
     –   ADC conversion by interruption:
          ◦   เปิดใช้งาน the ADC peripheral และสตาร์ท conversions โดยใช้ function HAL_ADC_Start_IT()
          ◦   รอสำหรับ ADC conversion completion โดยการเรียกของ function HAL_ADC_ConvCpltCallback() (ฟังชั่นนี้ต้องถูก
              จัดให้มีใช้ใน user program) (หรือสำหรับ injected group: HAL_ADCEx_InjectedConvCpltCallback() )
          ◦   ดึง conversion results โดยใช้ function HAL_ADC_GetValue() (หรือสำหรับ injected group:
              HAL_ADCEx_InjectedGetValue() )
          ◦   หยุด conversion และปิดใช้งาน the ADC peripheral โดยใช้ function HAL_ADC_Stop_IT()
     –   ADC conversion with transfer by DMA:
          ◦   เปิดใช้งาน the ADC peripheral และสตาร์ท conversions โดยใช้ function HAL_ADC_Start_DMA()
          ◦   รอสำหรับ ADC conversion completion โดยการเรียกของ function HAL_ADC_ConvCpltCallback() หรือ
              HAL_ADC_ConvHalfCpltCallback() (ฟังชั่นเหล่านี้ต้องถูกจัดให้มีใช้ใน user program)
          ◦   Conversion results ถูกส่งถ่ายโดยอัตโนมัติโดย DMA ลงใน destination variable address.
          ◦   หยุด conversion และปิดใช้งาน the ADC peripheral โดยใช้ function HAL_ADC_Stop_DMA()
     –   สำหรับ devices ที่มีหลาย ADCs: ADC multimode conversion ด้วยการส่งถ่ายโดย DMA:
          ◦   เปิดใช้งาน the ADC peripheral (slave) และสตาร์ท conversions โดยใช้ function HAL_ADC_Start()
          ◦   เปิดใช้งาน the ADC peripheral (master) และสตาร์ท conversions โดยใช้ function
              HAL_ADCEx_MultiModeStart_DMA()
          ◦   รอสำหรับ ADC conversion completion โดยการเรียกของ function HAL_ADC_ConvCpltCallback() หรือ
              HAL_ADC_ConvHalfCpltCallback() (ฟังชั่นเหล่านี้ต้องถูกจัดให้มีใช้ใน user program)
          ◦   Conversion results ถูกส่งถ่ายโดยอัตโนมัติโดย DMA ลงใน destination variable address.
          ◦   หยุด conversion และปิดใช้งาน the ADC peripheral (master) โดยใช้ function
              HAL_ADCEx_MultiModeStop_DMA()
          ◦   หยุด conversion และปิดใช้งาน the ADC peripheral (slave) โดยใช้ function HAL_ADC_Stop_IT()

Note: Callback functions ต้องถูกจัดให้มีใช้ใน user program:
      •   HAL_ADC_ErrorCallback()
      •   HAL_ADC_LevelOutOfWindowCallback() (callback of analog watchdog)
      •   HAL_ADC_ConvCpltCallback()
      •   HAL_ADC_ConvHalfCpltCallback
      •   HAL_ADCEx_InjectedConvCpltCallback()
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 08:16:28 am
Deinitialization of ADC
1.   ปิดใช้งาน the ADC interface
     –   ADC clock สามารถถูก hard reset และปิดใช้งานที่ RCC top level.
     –   Hard reset ของ ADC peripherals โดยใช้ macro __ADCx_FORCE_RESET(), __ADCx_RELEASE_RESET().
     –   ADC clock disable โดยใช้ the equivalent macro/functions ตามขั้นตอนการกำหนดค่านี้.
          ◦   ตัวอย่าง: ลงใน HAL_ADC_MspDeInit() (code location ที่แนะนำ) หรือด้วย device clock parameters
              configuration อื่น:
          ◦   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC
          ◦   PeriphClkInit.AdcClockSelection = RCC_ADCPLLCLK2_OFF
          ◦   HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit)
2.   ADC pins configuration
     –   ปิดใช้งาน the clock สำหรับ the ADC GPIOs โดยใช้ macro __HAL_RCC_GPIOx_CLK_DISABLE()
3.   เป็นทางเลือก, ในกรณีของการใช้ของ ADC พร้อมด้วย interruptions:
     –   ปิดใช้งาน the NVIC สำหรับ ADC โดยใช้ function HAL_NVIC_EnableIRQ(ADCx_IRQn)
4.   เป็นทางเลือก, ในกรณีของการใช้ของ DMA:
     –   ยกเลิกการกำหนดค่าเริ่มต้น the DMA โดยใช้ function HAL_DMA_Init().
     –   ปิดใช้งาน the NVIC สำหรับ DMA โดยใช้ function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 08:43:36 am
Callback registration
The compilation flag USE_HAL_ADC_REGISTER_CALLBACKS, เมื่อเซ็ตเป็น 1, ยอมให้ the user กำหนดค่าแบบไดนามิคส์ the driver callbacks. ใช้ Functions @ref HAL_ADC_RegisterCallback() เพื่อรีจีสเตอร์ an interrupt callback.

Function @ref HAL_ADC_RegisterCallback() ยอมให้รีจีสเตอร์ callbacks ต่อไปนี้:
•   ConvCpltCallback : ADC conversion complete callback
•   ConvHalfCpltCallback : ADC conversion DMA half-transfer callback
•   LevelOutOfWindowCallback : ADC analog watchdog 1 callback
•   ErrorCallback : ADC error callback
•   InjectedConvCpltCallback : ADC group injected conversion complete callback
•   MspInitCallback : ADC Msp Init callback
•   MspDeInitCallback : ADC Msp DeInit callback ฟังก์ชันนี้ใช้เป็น parameters the HAL peripheral handle, the Callback
     ID และ a pointer ไปยัง the user callback function.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 08:49:14 am
ใช้ function @ref HAL_ADC_UnRegisterCallback เพื่อรีเซ็ต a callback กลับเป็น the default weak function. @ref HAL_ADC_UnRegisterCallback ใช้เป็น parameters the HAL peripheral handle, และ the Callback ID. ฟังก์ชันนี้ยอมให้รีเซ็ต callbacks ต่อไปนี้:
•   ConvCpltCallback : ADC conversion complete callback
•   ConvHalfCpltCallback : ADC conversion DMA half-transfer callback
•   LevelOutOfWindowCallback : ADC analog watchdog 1 callback
•   ErrorCallback : ADC error callback
•   InjectedConvCpltCallback : ADC group injected conversion complete callback
•   MspInitCallback : ADC Msp Init callback
•   MspDeInitCallback : ADC Msp DeInit callback
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 09:14:20 am
โดยค่าเริ่มต้น, หลังจาก the @ref HAL_ADC_Init() และเมื่อ the state เป็น @ref HAL_ADC_STATE_RESET ทุก callbacks ถูกเซ็ตไปเป็น the corresponding weak functions: ตัวอย่าง @ref HAL_ADC_ConvCpltCallback(), @ref HAL_ADC_ErrorCallback(). มีข้อยกเว้นสำหรับ MspInit and MspDeInit functions ที่ถูกรีเซ็ตไปเป็น the legacy weak functions ใน the @ref HAL_ADC_Init()/ @ref HAL_ADC_DeInit() เฉพาะเมื่อ callbacks เหล่านี้เป็น null (ไม่ได้รีจีสเตอร์ไว้ก่อน).

ถ้า MspInit or MspDeInit ไม่เป็น null, the @ref HAL_ADC_Init()/ @ref HAL_ADC_DeInit() จะเก็บและใช้ the user MspInit/MspDeInit callbacks (รีจีสเตอร์ไว้ก่อน) ไม่ว่า the state เป็นอย่างไร.

Callbacks สามารถถูก registered/unregistered ใน @ref HAL_ADC_STATE_READY state เท่านั้น. ยกเว้น MspInit/MspDeInit functions ที่สามารถถูก registered/unregistered ใน @ref HAL_ADC_STATE_READY or @ref HAL_ADC_STATE_RESET state, ดังนั้น registered (user) MspInit/DeInit callbacks สามารถถูกใช้ในระหว่าง the Init/DeInit.

ดังนั้น, the user ก่อนอื่นรีจีสเตอร์ the MspInit/MspDeInit user callbacks โดยใช้ @ref HAL_ADC_RegisterCallback() ก่อนการเรียก @ref HAL_ADC_DeInit() or @ref HAL_ADC_Init() function.

เมื่อ the compilation flag USE_HAL_ADC_REGISTER_CALLBACKS ถูกเซ็ตเป็น 0 หรือไม่ได้กำหนด, the callback registration feature ไม่มีให้ใช้งานและทุก callbacks ถูกเซ็ตไปเป็น the corresponding weak functions.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 09:51:53 am
7.2.3 Initialization and de-initialization functions
section นี้จัดให้มี functions ที่ยอมให้:
•   เริ่มต้นและกำหนดค่า the ADC.
•   ยกเลิกการกำหนดค่าเริ่มต้น the ADC

section นี้บรรจุ the following APIs:
•   HAL_ADC_Init
•   HAL_ADC_DeInit
•   HAL_ADC_MspInit
•   HAL_ADC_MspDeInit
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 09:56:40 am
(https://i.imgur.com/kgEnNTF.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 03, 2022, 10:01:38 am
(https://i.imgur.com/lRtIuCd.png)
(https://i.imgur.com/hQhRUtr.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 07:20:54 am
7.2.7 Detailed description of functions

          HAL_ADC_Init
Function name
          HAL_StatusTypeDef HAL_ADC_Init (ADC_HandleTypeDef * hadc)
Function description
          กำหนดค่าเริ่มต้น the ADC peripheral และ regular group สอดคล้องกับ parameters ที่ระบุใน structure
          "ADC_InitTypeDef".
Parameters
          •   hadc: ADC handle
Return values
          •   HAL: status
Notes
          •   ตามข้อกำหนดเบื้องต้น, ADC clock ต้องถูกกำหนดค่าที่ RCC top level (clock source APB2). ดู commented
               example code ข้างล่างที่สามารถถูกคัดลอกและ uncommented ลงใน HAL_ADC_MspInit().
          •   ความสามารถในการอัปเดตพารามิเตอร์ได้ทันที: function นี้กำหนดค่าเริ่มต้น the ADC MSP (HAL_ADC_MspInit()) เฉพาะ
               เมื่อมาจาก ADC state reset. ตามติดการเรียกถึงฟังชั่นนี้สามารถถูกใช้เพื่อกำหนดค่าใหม่บาง parameters of
               ADC_InitTypeDef structure ได้ทันที, โดยไม่มีการแก้ไข MSP configuration. ถ้า ADC MSP ต้องถูกแก้ไขอีกครั้ง,
               HAL_ADC_DeInit() ต้องถูกเรียกก่อน HAL_ADC_Init(). The setting ของ parameters เหล่านี้ถูกปรับสภาพให้เป็น
               ADC state. สำหรับ parameters constraints, ดู comments of structure "ADC_InitTypeDef".
          •   function นี้กำหนดค่า the ADC ภายใน 2 scopes: scope of entire ADC และ scope of regular group. สำหรับ
               parameters details, ดู comments of structure "ADC_InitTypeDef".
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 08:33:33 am
          HAL_ADC_DeInit
Function name
          HAL_StatusTypeDef HAL_ADC_DeInit (ADC_HandleTypeDef * hadc)
Function description
           ยกเลิกการกำหนดค่าเริ่มต้น the ADC peripheral registers ไปเป็น default reset values ของพวกมัน, ด้วยยกเลิกการกำหนด
           ค่าเริ่มต้นของ the ADC MSP.
Parameters
          •   hadc: ADC handle
Return values
          •   HAL: status
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 08:38:14 am
(https://i.imgur.com/UN7M2is.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 08:39:11 am
(https://i.imgur.com/DuC9AQ9.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 08:42:38 am
(https://i.imgur.com/gxcIWTn.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 08:58:25 am
(https://i.imgur.com/8OW5Czy.png)
          •   : ADC peripheral disable คือ forcing stop of potential conversion on injected group. ถ้า injected group อยู่ภาย
                ใต้การใช้, มันควรถูกหยุดในเบื้องต้นโดยใช้ HAL_ADCEx_InjectedStop function.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 09:18:27 am
(https://i.imgur.com/C1QV1O1.png)
(https://i.imgur.com/j41p7Lc.png)
          •   ฟังก์ชันนี้ไม่สามารถถูกใช้ในการตั้งค่าเฉพาะ: ADC ที่กำหนดค่าใน DMA mode. ในกรณีนี้, DMA จะรีเซ็ต the flag EOC และ
               polling ไม่สามารถถูกดำเนินการบนแต่ละ conversion.
          •   บน STM32F1 devices, ข้อจำกัดในกรณีของ sequencer ถูกเปิดใช้งาน (หลาย ranks ถูกเลือก): polling ไม่สามารถถูกกระทำ
               บนแต่ละ conversion ภายใน the sequence. ในกรณีนี้, polling ถูกแทนที่โดยการรอเป็นเวลา maximum conversion time.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 09:27:29 am
(https://i.imgur.com/2dL6DQ7.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 09:31:52 am
(https://i.imgur.com/lV5jMc7.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 09:32:24 am
(https://i.imgur.com/xpZhSIk.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 09:54:23 am
(https://i.imgur.com/tPU6OX3.png)
          •   : ADC peripheral disable เป็น forcing stop of potential conversion on injected group. ถ้า injected group อยู่
               ภายใต้การใช้, มันควรถูกหยุดในเบื้องต้นโดยใช้ HAL_ADCEx_InjectedStop function.
          •   สำหรับ devices ที่มีหลาย ADCs: ฟังชั่นนี้ใช้สำหรับ single-ADC mode เท่านั้น. สำหรับ multimode, ใช้ the dedicated
               MultimodeStop function.
          •   บน STM32F1 devices, มีเพียง ADC1 and ADC3 (ADC availability ขึ้นอยู่กับ devices) ที่มี DMA capability.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 04, 2022, 10:30:02 am
(https://i.imgur.com/6YVf3oL.png)
          •   การอ่าน register DR จะเคลียร์ ADC flag EOC (ADC group regular end of unitary conversion) โดยอัตโนมัติ.
          •   ฟังชั่นนี้จะไม่เคลียร์ ADC flag EOS (ADC group regular end of sequence conversion). การเกิดของ flag EOS rising:
               ถ้า sequencer ประกอบด้วย 1 rank, flag EOS จะเทียบเท่ากับ flag EOC.ถ้า sequencer ประกอบด้วยหลาย ranks, ใน
               ระหว่าง the scan sequence flag EOC เท่านั้นที่พุ่งขึ้น, ที่ the end of the scan sequence ทั้ง flags EOC and EOS จะ
               พุ่งขึ้น. เพื่อเคลียร์ flag นี้, ใช้ function อย่างใดอย่างหนึ่ง: ใน programming model IT: HAL_ADC_IRQHandler(), ใน
               programming model polling: HAL_ADC_PollForConversion() หรือ __HAL_ADC_CLEAR_FLAG(&hadc,
               ADC_FLAG_EOS).
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 08:07:00 am
(https://i.imgur.com/aiqPLJk.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 08:07:33 am
(https://i.imgur.com/yhfsQo1.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 08:08:04 am
(https://i.imgur.com/GxkFmSY.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 08:09:17 am
(https://i.imgur.com/M7l96Zd.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 08:10:02 am
(https://i.imgur.com/85ehBIZ.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 08:34:29 am
(https://i.imgur.com/GDdPBVS.png)
          •   ในกรณีของการใช้ internal measurement channels: Vbat/VrefInt/TempSensor. These internal paths สามารถถูก
               ปิดใช้งานโดยใช้ function HAL_ADC_DeInit().
          •   ความสามารถในการอัปเดตพารามิเตอร์ได้ทันที: function นี้กำหนดค่าเริ่มต้น channel ลงใน regular group, ตามติดการเรียกถึง
               ฟังชั่นนี้สามารถถูกใช้เพื่อกำหนดค่าใหม่บาง parameters of structure "ADC_ChannelConfTypeDef" ได้ทันที, โดยไม่มีการ
               รีเซ็ต the ADC. The setting ของ parameters เหล่านี้ถูกปรับสภาพเป็น ADC state. สำหรับ parameters constraints, ดู
               comments of structure "ADC_ChannelConfTypeDef".
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:07:31 am
(https://i.imgur.com/fVbizBq.png)
Notes
          •   Analog watchdog thresholds สามารถถูกแก้ไขในขณะที่ ADC conversion กำลังดำเนินการอยู่. ในกรณีนี้, บางข้อจำกัดต้อง
               ถูกคำนึงถึง: the programmed threshold values จะมีผลจาก the next ADC EOC (end of unitary conversion). เมื่อ
               พิจารณาว่า registers write delay อาจจะเกิดขึ้นเนื่องจาก bus activity, นี้อาจจะเป็นเหตุให้เกิดความไม่แน่นอนบน the
               effective timing ของ the new programmed threshold values.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:16:57 am
(https://i.imgur.com/Y0QyILJ.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:17:24 am
(https://i.imgur.com/jRFIm3q.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:18:19 am
(https://i.imgur.com/2ODI0qb.png)
          •   เงื่อนไขเบื้องต้นในการใช้ฟังก์ชันนี้: ADC ต้องถูกปิดใช้งาน และ voltage regulator ต้องถูกเปิดใช้งาน (ทำลงใน
               HAL_ADC_Init()).
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:22:23 am
(https://i.imgur.com/AmKz4Wr.png)
(https://i.imgur.com/8F3MhBv.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:24:11 am
(https://i.imgur.com/uvjnFY7.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:25:50 am
(https://i.imgur.com/a55FVTW.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:27:39 am
(https://i.imgur.com/RkPaHZY.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 09:31:12 am
(https://i.imgur.com/TO3QR4j.png)
(https://i.imgur.com/IISFMA7.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:00:49 am
(https://i.imgur.com/o941Z8r.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:01:58 am
(https://i.imgur.com/xCQnVlR.png)
(https://i.imgur.com/i4XBGdT.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:05:29 am
(https://i.imgur.com/bGJatZ3.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:06:36 am
(https://i.imgur.com/10wtsdN.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:12:44 am
ADC_AWD1_EVENT
           ADC Analog watchdog 1 event: การตั้งชื่อสำรองเพื่อความเข้ากันได้กับ STM32 devices อื่นที่มีหลาย analog watchdogs
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:21:15 am
(https://i.imgur.com/fUqiEiU.png)
          •   ADC enable ต้องการ a delay สำหรับ ADC stabilization time (ดูที่ device datasheet, parameter tSTAB) บน
               STM32F1, ถ้า ADC ถูกเปิดใช้งานแล้ว macro นี้จะทริก a conversion SW start บน regular group.
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:25:52 am
(https://i.imgur.com/8QDQGui.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:26:16 am
(https://i.imgur.com/MlVjWju.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 05, 2022, 10:26:55 am
(https://i.imgur.com/cL6XDcI.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:08:46 am
(https://i.imgur.com/UbrqIwp.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:09:18 am
(https://i.imgur.com/nDM5KOO.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:09:55 am
(https://i.imgur.com/BzylXHQ.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:10:28 am
(https://i.imgur.com/fNu36V3.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:26:27 am
(https://i.imgur.com/CFZQ2qz.png)
(https://i.imgur.com/Rj4Q1vf.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:43:48 am
(https://i.imgur.com/xRaqyKy.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:45:11 am
(https://i.imgur.com/efPeQTQ.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:52:40 am
(https://i.imgur.com/6wUfh1w.png)
(https://i.imgur.com/GD0kGIW.png)
(https://i.imgur.com/ffIvlN5.png)
Title: Re: 7 HAL ADC Generic Driver
Post by: tha on July 06, 2022, 08:57:44 am
(https://i.imgur.com/A48YEOJ.png)
(https://i.imgur.com/vlVBRLp.png)
(https://i.imgur.com/2KmS3pF.png)