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

STM32 เป็นตระกูล ARM ที่สามโดย STMicroelectronics มันตามมาจากตระกูล STR9 ก่อนหน้านี้โดยใช้หลัก ARM9E และตระกูล STR7 ตามหลัก ARM7TDMI STM32 นั้นใช้พื้นฐานของตระกูล ARM Cortex-M

3
Eclipse + GNU ARM + STM32 - HAL หรือ SPL
ฉันจะเริ่มต้นด้วยการพัฒนา ARM (หลังจากใช้งาน AVR มา 2 ปี) และเลือกบอร์ด STM DISCOVERY ที่มีไมโครโปรเซสเซอร์ stm32f4 อยู่ ฉันตัดสินใจที่จะไปกับ eclipse + ARM gcc เนื่องจากฉันไม่ชอบขีด จำกัด โค้ดบน Keil และฉันไม่มีเงินที่จะได้รับเวอร์ชันที่จ่ายเงิน บทเรียนต่อไปนี้ฉันได้ติดตั้ง eclipse พร้อมกับ gcc ARM tools + openocd + ทำ utils เป็นต้น คำถามของฉันเกี่ยวกับปลั๊กอิน 'แพ็คเกจ' เช่นเดียวกับผู้เริ่มต้นฉันสับสนว่าจะใช้ STM HAL ใหม่หรือ SPL รุ่นเก่า ความเข้าใจของฉันคือ HAL ได้นำเอานามธรรมไปใช้ในระดับที่สามารถเรียกว่า Arduino เทียบเท่ากับแขน ในทางกลับกัน SPL …
10 arm  stm32  gcc  cortex  hal-library 

3
ฟังก์ชันขัดจังหวะซอฟต์แวร์เทียบกับ
หลังจากทำงานกับ MCU มาประมาณ 3 ปีฉันก็ไม่รู้ว่าการใช้อินเตอร์รัปต์ซอฟต์แวร์คืออะไร ฉันทำงานหลายอย่างด้วยSTM32และฉันไม่เคยใช้งานอินเตอร์รัปต์ซอฟต์แวร์ อันที่จริงนี่เป็นคำถามใหญ่สำหรับฉัน: ทำไมเมื่อเราสามารถใช้ฟังก์ชั่นง่าย ๆ ในการทำงานเราควรใช้ซอฟต์แวร์ขัดจังหวะหรือไม่ ซอฟต์แวร์ขัดจังหวะและฟังก์ชั่นต่างกันอย่างไร? ทุกครั้งที่คุณต้องการคุณสามารถเรียกฟังก์ชั่น (ที่คุณเขียนสำหรับงานของคุณ) ควรจะมีประโยชน์บางอย่างในการใช้ซอฟต์แวร์ขัดจังหวะแทนที่จะเป็นฟังก์ชั่นที่เรียบง่าย ฉันไม่แน่ใจ แต่ฉันคิดว่ามีประโยชน์สำหรับการขัดจังหวะโดยซอฟต์แวร์: คุณสามารถกำหนดลำดับความสำคัญสำหรับการขัดจังหวะซอฟต์แวร์จากนั้นคุณสามารถให้ความสำคัญกับการขัดจังหวะของซอฟต์แวร์เพื่อหลีกเลี่ยงการขัดจังหวะการทำงานของฮาร์ดแวร์
10 arm  stm32  interrupts 

3
การเลือกเค้าโครง pcb SDRAM
ฉันกำลังทำงานในโครงการที่มี STM32F429 ใหม่ในแพ็คเกจ LQFP208 ฉันต้องการประสานต้นแบบคู่แรกด้วยตัวเองด้วยเหตุผลงบประมาณต่ำ ฉันเลือกแพ็คเกจนี้เพื่อที่ฉันจะได้ตรวจสอบตัวเองว่ามีปัญหาเกิดขึ้นจากเส้นทาง / เฟิร์มแวร์หรือปัญหาการบัดกรี ในโครงการนี้มี LCD, CAMERA, ULPI และบัส SDRAM 32b บวกกับอินเทอร์เฟซที่ช้ากว่า FMC BUS จะใช้สำหรับ SDRAM เท่านั้นไม่จำเป็นต้องใช้หน่วยความจำอื่นสำหรับโครงการ PCB stackup เป็นมาตรฐาน 4 Layer S-GND-VCC-S ฉันต้องการคำแนะนำสำหรับสิ่งที่จะเป็นวิธีที่ดีที่สุดในการกำหนดเส้นทางส่วนต่อประสาน SDRAM / MCU ที่นี่มี 2 การออกแบบที่แตกต่างที่สามารถทำได้: สิ่งที่เหลือไว้จะดีที่สุดที่จะมีร่องรอยสั้น ๆ แต่มันจะไม่ออกจากห้องสำหรับการจับคู่ที่ยาวมากเกินไปซึ่งไม่จำเป็นจริงๆเนื่องจากการส่งสัญญาณล่าช้าน้อยมากสำหรับการติดตามสั้น ๆ ) รถบัส LCD / ULPI / CAMERA สามารถกำหนดเส้นทางให้กับปัญหาที่เกิดขึ้นจากภายนอกได้ ทางขวาอาจดีกว่ามีร่องรอยยาวขึ้นเล็กน้อย แต่มีที่ว่างสำหรับการจับคู่ที่ยาวและยังไม่จำเป็นต้องยกเลิก บัส LCD …
10 pcb  stm32  layout  sdram 

3
จะเกิดอะไรขึ้นบน STM32 เมื่อกำหนดค่าสองพินเพื่อให้มีฟังก์ชั่นสำรองเหมือนกัน
อ่านผ่านคู่มือ STM32F051 ดูเหมือนว่าเป็นไปได้ที่จะกำหนดค่าฟังก์ชั่นทางเลือกเดียวกันบนสองพิน ตัวอย่างเช่นคุณอาจมีหมุด USART1_TX หลายอันในเวลาเดียวกัน หรือตัวอย่างเช่นกรณีที่มีปัญหามากกว่าของหมุด USART_RX สองอัน คู่มือนี้เงียบในกรณีนี้ กฎหมาย / ปลอดภัยนี้หรือไม่ สิ่งนี้มีประโยชน์หรือไม่?
10 stm32  gpio 

1
การใช้โหมดการบูตสามโหมดของ STM32f103 คืออะไร
หากคุณเห็นในคู่มือการอ้างอิงของ STM32f103 คุณสามารถดูโหมดการบูตได้สามโหมด ดีโหมดการใช้งานสามโหมดคืออะไร โปรดพูดกับฉันตามตัวอย่างสำหรับแต่ละโหมด
10 memory  stm32 

2
รูปแบบ Quad SPI PCB
ฉันพยายามสร้างเลย์เอาต์ที่ดีสำหรับหน่วยความจำแฟลช Quad SPI NOR MT25QL256ABA1EW9-0SIT ด้วย STM32 MCU ปัญหาของฉันคือฉันพบว่าชิปหน่วยความจำ pinout ค่อนข้างไม่สะดวก ฉันจัดการเพื่อสลับพินที่ด้าน MCU วิธีที่สัญญาณอยู่ติดกัน แต่ก็ยังคงเป็นเรื่องยาก ทำตามคำแนะนำเลย์เอาต์ Micron Quad spi ที่ฉันจัดการ: ไม่แยกระนาบกราวด์ต้นแบบ (นี่คือ PCB แบบ 2 เลเยอร์) ทำให้สัญญาณนาฬิกาสั้นและอาจโค้งงอน้อยที่สุด ไม่ใช้ VIAS สำหรับการกำหนดเส้นทางสัญญาณ อย่างไรก็ตามฉันไม่ได้จัดการ: เก็บอิมพีแดนซ์ที่เหมาะสมโดยการคำนวณสไตรไลน์ (มีพื้นที่ไม่มากและมีสัญญาณมาก) รักษาความยาวของสัญญาณที่คล้ายกัน นี่คือเค้าโครง: หลังจากขยายภาพจะเห็นชื่อเน็ตบนแผ่นชิปหน่วยความจำ ฉันต้องการถามคุณในความเห็นของคุณว่าการออกแบบนี้เพียงพอสำหรับการถ่ายโอนสัญญาณนาฬิกามากถึง 80 Mhz เพื่อวัตถุประสงค์ในการเปรียบเทียบรูปร่างสีชมพูที่ชิปอยู่ภายในมีขนาด 18 x 8 มม. เทรูปหลายเหลี่ยมของ GND ถูกวางไว้เพื่อให้มองเห็นได้ ฉันขอขอบคุณความช่วยเหลือทั้งหมด
10 pcb  stm32  spi  layout  high-speed 

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 …

4
STM32: การขัดจังหวะตัวจับเวลาทำงานทันที
นี่คือรหัสสำหรับตัวจับเวลาในโครงการของฉันบน STM32F429: //timer initialization void timerInit() { uwPrescalerValue2 = (uint32_t) ((SystemCoreClock / 2) / 100000) - 1; RS485Timer.Instance = TIM5; RS485Timer.Init.Period = 67400000; // high value to notice interrupt even without debugging RS485Timer.Init.Prescaler = 400000; RS485Timer.Init.ClockDivision = 0; RS485Timer.Init.CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&RS485Timer); } void timerReset() { HAL_TIM_Base_Stop_IT(&RS485Timer); HAL_TIM_Base_DeInit(&RS485Timer); HAL_TIM_Base_Init(&RS485Timer); HAL_TIM_Base_Start_IT(&RS485Timer); …

3
การใช้ยูทิลิตี้ ST-LINK เพื่อกำหนดค่า RTC เป็นเวลาปัจจุบัน
สิ่งที่ฉันทำ ฉันกำลังใช้ไมโครคอนโทรลเลอร์ STM32 และสำหรับโครงการของฉันฉันต้องสามารถส่งข้อมูลในเวลาที่กำหนดของวัน (พูดเวลา 11.00 น. และ 14.00 น.) ไมโครคอนโทรลเลอร์จำเป็นต้องรู้ว่าเวลาเท่าไรก่อนที่ฉันจะทำสิ่งนี้สำเร็จ น่าเสียดายที่ฉันมีการสื่อสารทางเดียวเท่านั้นดังนั้นฉันจึงไม่สามารถขอเวลาปัจจุบันจากเครือข่ายได้ ดังนั้นฉันต้องการตั้งเวลาปัจจุบันโดยตรงหลังจากฉันเขียนโปรแกรมเสร็จแล้ว ฉันรู้ว่าฉันสามารถเขียนข้อมูลลงแฟลชได้โดยใช้อินเตอร์เฟสบรรทัดคำสั่งของยูทิลิตี้ ST-LINK (ST-LINK_CLI) โดยใช้คำสั่งต่อไปนี้: ST-LINK_CLI.exe -w32 <Address> <data> -Rst ฉันเขียนสคริปต์ทดสอบอย่างง่ายที่เขียนการประทับเวลา Unix ไปยังที่อยู่บางส่วนที่ไม่ได้ใช้งานโดยรหัส ฉันกำลังจะเขียนฟังก์ชั่นเพื่ออ่านการประทับเวลาและใช้เพื่อตั้งค่าเวลา RTC จนกว่าฉันจะอ่านสิ่งต่อไปนี้ในคู่มือผู้ใช้ยูทิลิตี้ ST-LINK : -w32 รองรับการเขียนลงในหน่วยความจำแฟลช, OTP, SRAM และ R / W ลงทะเบียน เมื่อคู่มือบอกว่ารองรับการเขียนลงทะเบียน R / W นี่หมายความว่าฉันสามารถเข้าถึงการลงทะเบียน RTC และตั้งค่าได้โดยตรงหรือไม่ ฉันลองแล้ว แต่ฉันไม่สามารถเขียนถึงรีจิสเตอร์เหล่านี้ได้ ฉันต้องการใช้วิธีนี้หากทำได้เพราะฉันไม่จำเป็นต้องเขียนฟังก์ชันเฉพาะเพื่อจัดการกับไมโครคอนโทรลเลอร์อีกต่อไป ซึ่งหมายความว่าฉันสามารถตั้งค่าเวลา …
9 stm32  rtc 

2
เหตุใดเขตข้อมูลบิตที่เกี่ยวข้องแบบตรรกะในการลงทะเบียน MCU มักจะอยู่ในตำแหน่งที่ตั้งอื่น?
ยกโทษให้ฉันถ้าคำถามนี้ได้รับคำตอบแล้ว แต่ฉันไม่สามารถหาคำตอบได้ในหน้านี้หรือในอินเทอร์เน็ตที่กว้างขึ้น ฉันเป็นนักพัฒนาที่มีประสบการณ์และมีความรู้ที่ดีเกี่ยวกับการเขียนโปรแกรมระดับต่ำ แต่ค่อนข้างใหม่ในการพัฒนาแบบฝัง ฉันสอนการพัฒนาระบบสมองกลฝังตัวด้วยบอร์ด ST-NUCLEO144 ซึ่งมี STM32F746ZG MCU คำถามหนึ่งที่ดูเหมือนไม่ชัดเจนสำหรับฉันคือว่าทำไมฟิลด์บิตที่เกี่ยวข้องอย่างมีเหตุผลในรีจิสเตอร์อาจอยู่ในตำแหน่งที่ตั้งอื่น ตัวอย่างหนึ่งคือการUSART_CR1ลงทะเบียนใน STM32746ZG M0และM1บิตเขตร่วมกันควบคุมความยาวของคำใน USART TX / RX, รวมมูลค่า 2 บิต0b00ระบุ 8 บิต0b01ระบุ 9 บิต ฯลฯ นี่คือทั้งหมดที่ค่อนข้างตรงไปตรงมายกเว้นว่าM0ที่บิตที่ 12 และM1ที่บิต 28 ... ทำไมเป็นอย่างนี้? นี่คือเหตุผลการออกแบบที่สืบทอดมาเช่นมีการแทรกคุณลักษณะใหม่ลงในพื้นที่ที่สงวนไว้ก่อนหน้านี้หรือไม่ สำหรับเหตุผลที่เกี่ยวข้องกับการออกแบบชิปที่ฉันไม่ได้พิจารณาหรือมีจุดประสงค์ที่ยิ่งใหญ่กว่านี้สำหรับสิ่งที่ฉันไม่เห็นหรือไม่? เห็นได้ชัดว่านี่เป็นเรื่องเล็กน้อยที่จะเอาชนะด้วยการหลอกลวงเล็กน้อย แต่ฉันแค่อยากรู้

1
ไม่สามารถตั้งโปรแกรม STM32 แบบกำหนดเองได้
ฉันออกแบบบอร์ด STM32 ง่าย ๆ ด้านล่างนี้เป็นแผนผังและรูปภาพโครงร่าง PCB: แผนผัง: เค้าโครง PCB: โครงร่าง PCB พร้อม VDD ไฮไลต์: โครงร่าง PCB พร้อม GND ที่ไฮไลต์: เฉพาะส่วนของการออกแบบนี้ที่เกี่ยวข้องกับคำถามของฉันเท่านั้นที่แสดงในภาพด้านบน ปัญหาของฉันคือฉันพยายามใช้ ST-Link ในตัวของบอร์ด STM32 Discovery เพื่อตั้งโปรแกรมบอร์ดที่กำหนดเองนี้ แต่ฉันยังไม่ประสบความสำเร็จ แอปพลิเคชัน ST-Link Utility บนพีซีสามารถจดจำโปรแกรมเมอร์ แต่ไม่สามารถตรวจจับ MCU เป้าหมายได้ ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ "เป้าหมายไม่ได้เชื่อมต่อ" และ "ข้อผิดพลาดการสื่อสาร USB ST-Link" นี่คือข้อเท็จจริงบางอย่างที่เกี่ยวข้องกับปัญหาของฉัน: บอร์ด STM32 Discovery ทำงานได้ดี: ฉันสามารถใช้ ST-Link ในตัวเพื่อตั้งโปรแกรมบนบอร์ด STM32 MCU …
9 stm32  swd  custom 

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; } …

4
ความแตกต่างระหว่างฟังก์ชั่น rand () และอุปกรณ์ต่อพ่วง RNG (ตัวสร้างตัวเลขสุ่ม) คืออะไร?
ฉันสงสัยว่าอุปกรณ์ต่อพ่วง RNG (ตัวสร้างตัวเลขสุ่ม) ใน STM32F4XXXX MCUs ดูในคู่มืออ้างอิงนี้ (หน้า 748) ในทางกลับกันเรามีฟังก์ชั่น rand () ในไลบรารี stdlib ที่ทำหน้าที่เดียวกัน ตอนนี้ฉันมีสองคำถาม: อะไรคือความแตกต่าง (ข้อดีและข้อเสีย) ระหว่างฟังก์ชั่น rand () และอุปกรณ์ต่อพ่วง RNG (หมายเลขสุ่ม)? ดูส่วนนี้: โปรดอธิบายเกี่ยวกับตัวเลือกทั้งสองนี้ (โดยเฉพาะตัวเลือกที่สอง)

3
STM32: ทำการรีเซ็ตซอฟต์แวร์
ฉันพยายามทำการรีเซ็ตซอฟต์แวร์ของ STM32F2 ของฉัน (มีคู่มืออ้างอิงอยู่ที่นี่ ) หน้าที่เกี่ยวข้องของคู่มืออ้างอิง (หน้า 80) ให้ข้อมูลเล็กน้อย โดยทั่วไปSYSRESETREQบิตของApplication Interrupt and Reset Control Registerต้องถูกตั้งค่า ตอนนี้หน้านี้อธิบายว่าเพื่อให้สามารถปรับเปลี่ยนได้ต้องSYSRESETREQมีการ "เขียน" คีย์เฉพาะลงในVECTKEYบิต ไม่มีเอกสารอธิบายว่านี่Application Interrupt and Reset Control Registerคือที่ใด ที่อยู่ของมันคืออะไรและฉันจะเข้าถึงมันได้อย่างไร
9 stm32  reset 

2
ความอดทน 5V บนอินพุต VBUS sensing
ฉันกำลังออกแบบอุปกรณ์รอบตัว STM32L476 อุปกรณ์ของฉันใช้พลังงานจากแบตเตอรี่เป็นหลัก แต่มีพอร์ต USB ที่เมื่อฉันเสียบฉันต้องการใช้เป็นแหล่งพลังงานทางเลือก (ผ่านตัวควบคุม 3.3V) เพื่อ จำกัด การระบายแบตเตอรี่ อาจเป็นไปได้ว่าผู้ใช้เชื่อมต่อพอร์ต USB ในขณะที่ไม่มีแบตเตอรี่ ฉันต้องการรับรู้เมื่อเชื่อมต่อพอร์ต USB ดังนั้นฉันใช้ PA9 เป็น OTF_FS_VBUS ข่าวดี : แผ่นข้อมูลบอกว่าพิน PA9 มีความทนทานต่อ 5V ข่าวร้าย : พินที่ทนทานต่อ 5V ดูเหมือนว่าจะเป็นตัวต้านทาน 5V จริง ๆ ก็ต่อเมื่อมีการใช้พลังงาน แผ่นข้อมูล§6.2ตารางที่ 18 พูดว่า: แรงดันไฟฟ้าอินพุตสูงสุดบน FT_xxx พิน: min (VDD, VDDA, VDDIO2, VDDUSB, VLCD) + 4.0V ในกรณีของฉันหากไม่มีแบตเตอรี่และผู้ใช้เชื่อมต่อพอร์ต …
8 usb  stm32  usb-otg 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.