STM32F1 ADC HAL

  • 67 Replies
  • 619 Views
*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #16 on: September 18, 2020, 09:32:38 am »
11.3.4 Single conversion mode
ใน Single conversion mode the ADC ทำการแปลงครั้งเดียว. โหมดนี้จะสตาร์ทโดยการเซ็ตบิต ADON bit ใน the ADC_CR2 register (สำหรับ a regular channel เพียงอย่างเดียว) หรือโดย external trigger (สำหรับ a regular หรือ injected channel), ในขณะที่ the CONT bit เป็น 0.
เมื่อการแปลงชาแนลที่เลือกเสร็จสมบูรณ์:
• ถ้า a regular channel ถูกแปลงเสร็จแล้ว:
   – The converted data ถูกเก็บไว้ใน the 16-bit ADC_DR register
   – The EOC (End Of Conversion) flag ถูก set
   – และ an interrupt ถูก generated ถ้าบิต the EOCIE ถูก set.
• ถ้า an injected channel ถูกแปลงเสร็จแล้ว:
   – The converted data ถูกเก็บไว้ใน the 16-bit ADC_DRJ1 register
   – The JEOC (End Of Conversion Injected) flag ถูก set
   – และ an interrupt ถูก generated ถ้า the JEOCIE bit ถูก set.
The ADC จากนั้นก็จะหยุดทำงาน.

ปล. บิต CONT bit ก็จะอยู่ในรีจีสเตอร์ ADC control register 2 (ADC_CR2) ใน reference manaul หน้า 240

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #17 on: September 18, 2020, 09:44:01 am »
11.3.5 Continuous conversion mode
ใน continuous conversion mode ADC สตาร์ทการแปลงอื่นทันทีเมื่อมันเสร็จการแปลงแล้ว โหมดนี้จะสตาร์ทโดย external trigger หรือโดยการเซ็ตบิต the ADON bit ใน the ADC_CR2 register, ในขณะที่บิต the CONT bit เป็น 1.
หลังจากการแปลงแต่ละครั้ง :
• ถ้า a regular channel ถูกแปลงเสร็จแล้ว:
   – The converted data ถูกเก็บไว้ใน the 16-bit ADC_DR register
   – The EOC (End Of Conversion) flag ถูก set
   – และ an interrupt ถูก generated ถ้าบิต the EOCIE ถูก set.
• ถ้า an injected channel ถูกแปลงเสร็จแล้ว:
   – The converted data ถูกเก็บไว้ใน the 16-bit ADC_DRJ1 register
   – The JEOC (End Of Conversion Injected) flag ถูก set
   – และ an interrupt ถูก generated ถ้า the JEOCIE bit ถูก set.

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #18 on: September 18, 2020, 10:18:58 am »
11.3.6 Timing diagram
ดังแสดงในรูป Figure 23, the ADC ต้องการเวลา a stabilization time ของ tSTAB ก่อนที่มันจะสตาร์ทการแปลงอย่างเที่ยงตรง. หลังจากการสตาร์ทของ ADC conversion และหลังจากนั้นอีก 14 clock cycles, the EOC flag จะถูก set และ the 16-bit ADC Data register บรรจุด้วยผลของการแปลง.



ปล. บิต Bit 22 SWSTART: Start conversion of regular channels และบิต Bit 21 JSWSTART: Start conversion of injected channels ก็จะอยู่ในรีจีสเตอร์ ADC control register 2 (ADC_CR2) ใน reference manaul หน้า 240
ส่วน ADC regular data register (ADC_DR) และ ADC injected data register x (ADC_JDRx) (x= 1..4) อยู่หน้า 251

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #19 on: September 18, 2020, 04:34:37 pm »
http://www.mediafire.com/file/d7j6q6w5h0wq7ph/ET-STM32F103_ADC1.rar/file
ลองดู ADC สองชาแนล PA0 กับ PA1 ก็ทำงานได้ ลองเช็คกันดูเอา ว่าถูกต้องครบถ้วนไหม

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #20 on: September 18, 2020, 05:14:15 pm »
ท่านใดแนะนำให้ตั้งชาแนลเดียว ก็ทำงานได้ครับ
Quote
ADC_InitStructure.ADC_NbrOfChannel = 1;
เพราะเราให้แปลงทีละครั้ง ก็เพียงเปลี่ยนชาแนลไปก่อน แล้วถึงสตาร์ททำการแปลงเพียงครั้งเดียว
Quote
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
scan mode เราก็ไม่ให้ทำงาน

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #21 on: September 19, 2020, 12:25:48 pm »
ฝนตกอากาศเย็นๆ โปรเจ็คก็ออกดี วันนี้ก็ได้มาหนึ่งโปรเจ็ค ADC แบบ HAL แล้วนะ ก็เอามาจากตัวอย่างที่เคยให้ลิ้งค์เอาไว้ เป็นแบบ adc polling จาก analog input PA0 (เอาตัวต้านทานปรับค่าได้มาต่อที่ PA0) แล้วเอาค่าที่ได้มาแสดงที่จอ GLCD5110 เหมือนเคย ก็สามารถทำงานได้ครับ
http://www.mediafire.com/file/xo0lc63wa3r29gf/ET-STM32F103RB-ADC.rar/file

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #22 on: September 19, 2020, 03:10:25 pm »
http://www.mediafire.com/file/8bqmfve67dbfv23/main.c/file
มันต้องใส่   void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc);  ไปอย่างนี้ด้วยหรือเปล่า ตัวอย่างที่เขาให้มาก็ไม่ได้ใส่ ท่านใดพอทราบบ้าง ช่วยอธิบายหน่อยครับ

*

Offline tha

  • *****
  • 1301
    • View Profile
Re: STM32F1 ADC HAL
« Reply #23 on: September 19, 2020, 03:38:14 pm »
ผมลองเปลี่ยนชื่อฟังชั่นใหม่เป็นอย่างนี้  void HAL_ADC_MspInit1(ADC_HandleTypeDef* hadc); แล้วมันไม่ทำงานนะ จอขาวเลย ผมเอา 1 ออก ก็ทำงานได้ปกติ แสดงว่าของเขาทำมาถูกแล้ว ผมก็ยังมือใหม่ยังต้องงม HAL ไปอีกนาน คุณ dec พอจะทราบการทำงานของมันมั๊ย ท่านใดพอจะทราบ ช่วยอธิบายหน่อยครับ