คำถามติดแท็ก stm32f4

5
CMSIS เทียบกับ HAL เทียบกับมาตรฐานห้องสมุดอุปกรณ์ต่อพ่วง
ดังนั้นฉันจึงเปลี่ยนจาก PICs เป็น ARM และฉันซื้อบอร์ดค้นพบ STM32F4 จนถึงตอนนี้ฉันเข้าใจว่าในการเขียนโปรแกรมคุณสามารถเข้าถึงการลงทะเบียนทั้งหมดในหน่วยความจำโดยตรง (วิธีที่ชัดเจน) และยังมีห้องสมุดหลัก 3 แห่งที่คุณสามารถใช้เพื่อทำให้ชีวิตของคุณง่ายขึ้น ตอนนี้คำถามของฉันคือหนึ่งในสามของเหล่านั้น (CMSIS, HAL, Std อุปกรณ์ต่อพ่วง Lib) เป็นระดับต่ำที่สุด? กล่าวคือ หนึ่งที่มีค่าใช้จ่ายน้อย เป้าหมายของฉันคือการเรียนรู้การทำงานภายในของผู้ควบคุมและไม่ทำให้ชีวิตของฉันง่ายขึ้น (เพียงเล็กน้อย) ดังนั้นฉันอยากจะรู้ว่าสิ่งใดที่อยู่ใกล้กับแกนกลางโดยไม่ต้องใช้ชุดประกอบ
29 arm  stm32  stm32f4  cmsis 

3
STM32F4 และ HAL
ดังนั้นฉันจึงทำการทดลองกับ STM32F407 (ฉันใหม่สำหรับ ARM) และตัดสินใจที่จะเขียนแอพอย่างง่ายโดยใช้ไลบรารี HAL เนื่องจากดูเหมือนว่า ST จะหยุดการทำงานของไลบรารีอุปกรณ์ต่อพ่วงมาตรฐาน ดังนั้นคำถามของฉันคืออะไรจุดใน HAL คืออะไร? StdPeriph ไม่ทำงานใช่ไหม เหตุใดพวกเขาจึงยกเลิก HAL สำหรับฉันดูเหมือนว่า HAL จะเป็นระเบียบอย่างสมบูรณ์ เอกสารประกอบคือ AWFUL อย่างน้อยที่สุดสำหรับ StdPeriph มีการอ้างอิงที่สมบูรณ์ซึ่งจัดได้ดีพอที่จะค้นหาสิ่งที่คุณต้องการได้อย่างง่ายดาย ( http://stm32.kosyak.info/doc/ ) สำหรับ HAL จะมีไฟล์ PDF เส็งเคร็ง ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ) ซึ่งมีโครงสร้างแบบสุ่มที่ดูเหมือนว่า การอ่านหัวข้อใด ๆ เช่นเกี่ยวกับอุปกรณ์ต่อพ่วงฉันไม่สามารถเข้าใจข้อกำหนดในการกำหนดค่าและปรับแต่งได้อย่างเหมาะสม ดูเหมือนว่าบันทึกส่วนตัวจากใครบางคนที่ไม่ต้องการที่จะลืมสิ่งที่มากกว่าการอ้างอิง ฉันรู้ว่าฉันสามารถใช้ CubeMX เพื่อเริ่มต้น GPIO และกำหนดค่าอุปกรณ์ต่อพ่วง แต่เป้าหมายของฉันคือการทำด้วยตัวเองดังนั้นฉันจึงเข้าใจการทำงานของพวกเขาได้ดีขึ้นไม่มีซอฟต์แวร์ใดที่สามารถทำได้ทั้งหมดสำหรับฉัน ฉันกำลังทำอะไรผิดหรือเปล่า? ARM เป็นมือใหม่ในตัวฉันหรือเปล่าที่ทำให้ฉันสับสน? หรือเป็นเอกสารที่มีอยู่ที่ไม่ดี?
23 arm  stm32  stm32f4 

6
ฉันจะใช้ฟังก์ชัน printf บน STM32 ได้อย่างไร
ฉันพยายามหาวิธีใช้ฟังก์ชั่น printf เพื่อพิมพ์ไปยังพอร์ตอนุกรม การตั้งค่าปัจจุบันของฉันคือรหัสที่สร้างขึ้นจากSTM32CubeMXและ SystemWorkbench32 พร้อมกับบอร์ดการค้นพบ STM32F407คณะกรรมการ ฉันเห็นใน stdio.h ว่าต้นแบบ printf ถูกกำหนดเป็น: int _EXFUN(printf, (const char *__restrict, ...) _ATTRIBUTE ((__format__ (__printf__, 1, 2)))); มันหมายความว่าอะไร? ตำแหน่งที่แน่นอนของนิยามฟังก์ชันนี้อยู่ที่ไหน อะไรคือจุดทั่วไปในการค้นหาวิธีการใช้ฟังก์ชั่นประเภทนี้ในการส่งออก

1
เหตุการณ์ Stm32 และการขัดจังหวะ
ฉันเริ่มเรียนรู้การขัดจังหวะบน stm32 โดยเฉพาะอย่างยิ่งบอร์ดค้นพบ stm32f4 ฉันพบตัวอย่างนี้ซึ่งคุณต้องกดปุ่มเพื่อเริ่มการขัดจังหวะและผลักดันมันอีกครั้งเพื่อหยุดมัน ในบรรทัดนี้: EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt เราต้องเลือกโหมดอินเตอร์รัปต์หรือโหมดเหตุการณ์ ฉันเปลี่ยนเป็นโหมดกิจกรรม แต่ดูเหมือนว่าจะไม่ทำงานดังนั้นฉันจึงออกมาพร้อมกับข้อสรุปว่าตัวจัดการถูกดำเนินการเมื่อมีการขัดจังหวะเท่านั้น เหตุใดเราจึงใช้กิจกรรมใน stm32 หากคุณไม่สามารถเรียกใช้รหัสบางอย่างเมื่อเกิดขึ้น นี่คือรหัส: #include "stm32f4xx.h" #include "stm32f4xx_syscfg.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_exti.h" #include "misc.h" EXTI_InitTypeDef EXTI_InitStructure; void EXTILine0_Config(void); void LEDInit(void); void ExtInt(void) { LEDInit(); /* Configure EXTI Line0 (connected to PA0 pin) in interrupt mode */ …

3
ต้องใช้รหัสขั้นต่ำในการเริ่มต้น STM32F4 หรือไม่
ต้องใช้วิธีที่มีประสิทธิภาพ / รหัสน้อยที่สุดในการเริ่มต้นใช้งาน STM32F4 อย่างไร ไฟล์เริ่มต้นที่มาจาก ST ดูเหมือนจะมีรหัสที่ไม่จำเป็นจำนวนมาก
14 arm  stm32f4  keil 

4
การแปลง ADC STM32 โดยใช้ HAL
ฉันพยายามเรียนรู้วิธีใช้ไลบรารี่ HAL "ใหม่" จาก stm32 เมื่อฉันพยายามแปลง ADC อย่างง่ายมันใช้งานได้เพียงครั้งเดียว แต่ก็หยุดการแปลง ฉันคิดว่าไม่ได้ตั้งค่าสิ้นสุดการแปลง ฉันกำลังใช้บอร์ดค้นพบ STM32f429I ซึ่งมีบอร์ด STM32f429ZI อยู่ โปรดทราบว่าฉันรู้ว่า sprintf เป็นการฝึกที่ไม่ดีและการทำ adc ด้วยการขัดจังหวะนั้นดีกว่าฉันรู้ว่าโปรดอย่าชี้ให้เห็นว่านี่ไม่เกี่ยวข้องกับคำถามฉันแค่ทดสอบ HAL ที่นี่ ดังนั้นคำถามคือทำไมไม่ตั้งค่าสถานะ EOC หรือฉันต้องทำอย่างไรเพื่อให้ใช้งานได้ Googling ไม่ได้ช่วยอะไรมากมายเนื่องจากมีเนื้อหาที่ดีเกี่ยวกับ HAL อยู่เล็กน้อย นี่คือรหัส: __IO uint16_t ADCValue=0; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc); int main(void) { char str[15]; /* Various initializations */ HAL_ADC_Start(&hadc1); while (1) { if …

2
STM32F4 Cube HAL UART มันเป็นข้อบกพร่องหรือฉันหายไปบางอย่าง?
ฉันกำลังใช้ UART IO แบบขัดจังหวะ (ไม่มี DMA) HAL_UART_Transmit_ITฟังก์ชั่นตั้งค่าEIEบิตในการCR3ลงทะเบียน ตามแผ่นข้อมูล STM32F407 (และลักษณะการทำงานจริง) สิ่งนี้จะสร้างการขัดจังหวะในโหมดมัลติบัฟเฟอร์เท่านั้น (เมื่อDMARตั้งค่าบิต) EIEช่วยให้การสร้างขัดจังหวะสำหรับข้อผิดพลาดของเฟรม ( FE), ข้อผิดพลาดเกิน ( ORE), ข้อผิดพลาดของเสียง ( NE) ข้อผิดพลาดนี้ตามที่ฉันเข้าใจเพียงเพื่อรับเท่านั้น ส่วนหนึ่งของHAL_UART_IRQHandlerฟังก์ชั่น: tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE); tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR); /* UART Over-Run interrupt occurred ----------------------------------------*/ if((tmp1 != RESET) && (tmp2 != RESET)) { __HAL_UART_CLEAR_OREFLAG(huart); huart->ErrorCode |= HAL_UART_ERROR_ORE; } …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.