Агуулгын хүснэгт:

STM32CubeMX товчлуур тасалдсан тохиолдолд 5 алхам
STM32CubeMX товчлуур тасалдсан тохиолдолд 5 алхам

Видео: STM32CubeMX товчлуур тасалдсан тохиолдолд 5 алхам

Видео: STM32CubeMX товчлуур тасалдсан тохиолдолд 5 алхам
Видео: Программирование STM32 Blue Pill с помощью релейной логики ПЛК LDmicro 2024, Долдугаар сарын
Anonim
STM32CubeMX товчлуур нь тасалдалтай байна
STM32CubeMX товчлуур нь тасалдалтай байна

Сайн байна уу, энэ гарын авлагад товчлуур унахаас урьдчилан сэргийлэх энгийн шийдлийг өгөхийг хичээх болно. Интернет дээр энэ асуудлыг шийдэх олон видеонууд байдаг, гэхдээ гадны тасалдал биш юм. Эдгээр бүх видеонуудын товчлуурыг дарах нь үр дүн багатай санал асуулгын аргаар шалгагддаг. Тиймээс, эхэлцгээе!

Алхам 1: Техник хангамж ба програм хангамжийн шаардлага

Тоног төхөөрөмжийн шаардлага:

  • STM32 ARM хөгжүүлэх самбар
  • Компьютер

Програм хангамжийн шаардлага:

  • STM32CubeMX
  • Keil uVision5

Алхам 2: Асуудлыг ойлгох

Асуудлыг ойлгох
Асуудлыг ойлгох

Тиймээс, бид товчлуурыг үсрэх асуудлын шийдлийг олохыг хичээдэг. Тиймээс бид асуудлыг ойлгох ёстой. Тиймээс, бид товчлуурыг дарахад өмнөх төлөвөөсөө эсрэг төлөв гарч ирэх ёстой. Жишээлбэл, хэрэв энэ нь өндөр байсан бол энэ нь бага байх ёстой, хэрэв энэ нь бага байсан бол өндөр байх ёстой. Гэсэн хэдий ч энэ бол хамгийн тохиромжтой төлөв (PROTEUS дээр:)) Бодит байдал дээр бид товчлуурыг дарахад сул зогсолт эхлэхээс өмнө HIGH ба LOW хооронд шилжиж эхэлдэг. Тиймээс хэд хэдэн удаа дарагдсан мэт дүр эсгэж, энэ нь асуудал үүсгэдэг. Тэгэхээр, бид юу хийх ёстой вэ?

Энэ жишээнд бид товчлуур дарахыг илрүүлэхийн тулд гадны тасалдлыг ашиглах болно гэдгийг энд тэмдэглэхийг хүсч байна. Тиймээс товчлуурыг дарсны дараа бид сул зогсолтонд орохын тулд 50mS гэх мэт хэсэг хугацаа хүлээх хэрэгтэй бөгөөд товчлуур сул байгаа эсэхийг дахин шалгах хэрэгтэй. Хэрэв энэ нь сул зогссон бол бид үүргээ үргэлжлүүлж болно. Тиймээс кодыг харцгаая:)

Алхам 3: STM32CubeMX -ийн тохиргоо

STM32CubeMX тохиргоо
STM32CubeMX тохиргоо

Тиймээс бид эхлээд товчлуурын товчлуурынхаа гаднах тасалдлыг идэвхжүүлэх хэрэгтэй (энд та STM32F407VG нээлтийн самбарыг ашигладаг гэж бодож байна):

  • "Pinout & Configuration" таб дээр товчлуурт холбогдсон PA0 зүү дээр товшоод GPIO_EXTI0 -ийг сонгоод энэ зүү дээр гадуур тасалдах боломжтой болно.
  • Зүү "хэрэглэгчийн шошго" -ыг "Push_Button" эсвэл хүссэн зүйл болгон өөрчил.

Дараа нь бид 50mS хугацааны хоцрогдол үүсгэхийн тулд таймерыг тохируулах хэрэгтэй.

  • "Цаг хэмжигч" хэсгийг оруулна уу
  • TIM1 дээр дарна уу
  • Цагийн эх сурвалж болох "Дотоод цаг" -ыг сонгоно уу
  • Тохиргооны хувьд (Хэрэв та энэ хэсгийг ойлгохыг хүсч байвал "STM32F4 ARM MCU -тай Servo Motor Control" гэсэн зөвлөмжийг үзнэ үү):

    • Урьдчилан тооцоолох төхөөрөмжийг 32000 болгож тохируулна уу
    • Мөн тоолох хугацаа 50 хүртэл
  • "NVIC Тохиргоо" таб дээр бүх тасалдлыг идэвхжүүлнэ үү

LED -ийг гаралт болгон идэвхжүүлэх:

PD12 дээр дарж "GPIO_Output" болгож тохируулна уу

Дараа нь дээрх зураг дээрх шиг цагийг тохируулаад кодыг үүсгэнэ үү.

Алхам 4: Keil програм хангамж хөгжүүлэх

Нэгдүгээрт, бид төрийн хувьсагчийг тодорхойлдог бөгөөд энэ нь үсрэх үед гадны тасалдал дотор таймерыг эхлүүлэхгүй байх боломжийг олгодог.

/ * USER CODE BEGIN PFP */bool state = true; / * ХЭРЭГЛЭГЧИЙН КОД БҮРТГЭЛИЙГ ДУУСГАХ */

Дараа нь бид ISR -ийг гадны тасалдалд зориулж бичнэ.

хүчингүй HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); төлөв = худал; } өөр {_NOP (); }}

Товчлуурыг дарахад энэ нь бидний тодорхойлсон товчлуур байсан эсэх, төлөв үнэн эсэхийг шалгадаг. If мэдэгдлийг оруулахын тулд эхэнд муж үнэн байх болно. Орсны дараа бид таймерыг асааж, таймерыг дахин эхлүүлэхгүйн тулд худал гэж хэлдэг.

Дараа нь бид таймер тасалдахын тулд ISR бичнэ.

void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Ашиглагдаагүй аргументын эмхэтгэлийн анхааруулга * / UNUSED (htim) -ээс урьдчилан сэргийлэх;

/* ТАЙЛБАР: Буцаах шаардлагатай бол энэ функцийг өөрчлөх ёсгүй.

HAL_TIM_PeriodElapsedCallback нь хэрэглэгчийн файлд хэрэгжиж болно */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_) төлөв = үнэн; HAL_TIM_Base_Stop_IT (& htim1); }}

/ * ХЭРЭГЛЭГЧИЙН КОД ТӨГСГӨЛ 4/ *

50mS -ийн дараа товчлуур дахин тохируулагдсан эсвэл суллагдсан эсэхийг шалгана уу, хэрэв тийм бол энэ товчлуур идэвхгүй байдалд байгааг бид мэднэ. Дараа нь бид дахин асаахын тулд товчлуурыг дарж, цагийг зогсоох өөр товчлуурыг илрүүлэхийн тулд удирдагчийг асааж, нөхцөлийг үнэн болгоно.

Тиймээс энэ үйл явц нь бид үсрэхээс урьдчилан сэргийлэх болно.

Алхам 5: Дүгнэлт

Энэ бол товчлуурыг тайлах код байв. Энэ кодыг миний боловсруулсан бөгөөд би туршлагатай програмист биш гэдгийг тэмдэглэхийг хүсч байна. Тиймээс алдаа гарах нь гарцаагүй. Хэрэв танд илүү сайн шийдэл байгаа бол үүнийг анхаарна уу. Бүү мартаарай, хэрэв танд ямар нэгэн асуудал тулгарвал надад бичээрэй, би туслахыг хичээх болно.

Зөвлөмж болгож буй: