STM32F1 ADC HAL

Started by tha, September 17, 2020, 09:42:20 AM

Previous topic - Next topic

tha

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

tha

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.

tha

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


tha


tha

ท่านใดแนะนำให้ตั้งชาแนลเดียว ก็ทำงานได้ครับ
Quote
ADC_InitStructure.ADC_NbrOfChannel = 1;
เพราะเราให้แปลงทีละครั้ง ก็เพียงเปลี่ยนชาแนลไปก่อน แล้วถึงสตาร์ททำการแปลงเพียงครั้งเดียว
Quote
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
scan mode เราก็ไม่ให้ทำงาน

tha

ฝนตกอากาศเย็นๆ โปรเจ็คก็ออกดี วันนี้ก็ได้มาหนึ่งโปรเจ็ค ADC แบบ HAL แล้วนะ ก็เอามาจากตัวอย่างที่เคยให้ลิ้งค์เอาไว้ เป็นแบบ adc polling จาก analog input PA0 (เอาตัวต้านทานปรับค่าได้มาต่อที่ PA0) แล้วเอาค่าที่ได้มาแสดงที่จอ GLCD5110 เหมือนเคย ก็สามารถทำงานได้ครับ

tha


tha

ผมลองเปลี่ยนชื่อฟังชั่นใหม่เป็นอย่างนี้  void HAL_ADC_MspInit1(ADC_HandleTypeDef* hadc); แล้วมันไม่ทำงานนะ จอขาวเลย ผมเอา 1 ออก ก็ทำงานได้ปกติ แสดงว่าของเขาทำมาถูกแล้ว ผมก็ยังมือใหม่ยังต้องงม HAL ไปอีกนาน คุณ dec พอจะทราบการทำงานของมันมั๊ย ท่านใดพอจะทราบ ช่วยอธิบายหน่อยครับ