Բովանդակություն:
- Քայլ 1: Սարքավորման և ծրագրային ապահովման պահանջներ
- Քայլ 2: Հասկանալով խնդիրը
- Քայլ 3: STM32CubeMX կազմաձևում
- Քայլ 4. Keil ծրագրաշարի մշակում
- Քայլ 5: Եզրակացություն
Video: STM32CubeMX կոճակը անջատում ընդհատումով. 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Բարև, այս ձեռնարկում ես կփորձեմ տալ իմ պարզ լուծումը `կոճակի ցատկումը կանխելու համար, ինչը շատ լուրջ խնդիր է: Ինտերնետում կան բազմաթիվ տեսանյութեր, որոնք առաջարկում են այս հարցի լուծումը, բայց դրանցից ոչ մեկը արտաքին ընդհատումների համար: Այս բոլոր տեսանյութերում կոճակը սեղմելը ստուգվում է հարցման եղանակով, որն անարդյունավետ է: Այսպիսով, եկեք սկսենք:
Քայլ 1: Սարքավորման և ծրագրային ապահովման պահանջներ
Սարքավորման պահանջներ.
- STM32 ARM զարգացման տախտակ
- Համակարգիչ
Softwareրագրային ապահովման պահանջներ.
- STM32CubeMX
- Keil uVision5
Քայլ 2: Հասկանալով խնդիրը
Այսպիսով, մենք փորձում ենք լուծում գտնել կոճակով ցատկելու խնդրին: Հետևաբար, մենք պետք է հասկանանք հարցը: Այսպիսով, երբ մենք սեղմում ենք կոճակը, այն պետք է գա մի վիճակի, որը հակառակ է իր նախկին վիճակին: Օրինակ, եթե այն եղել է ԲԱՐՁՐ, ապա այն պետք է լինի OWԱOWՐ, իսկ եթե OWԱOWՐ է, ապա պետք է լինի ԲԱՐՁՐ: Այնուամենայնիվ, սա իդեալական վիճակ է (PROTEUS- ում:)) Իրականում, երբ մենք սեղմում ենք մի կոճակ, այն սկսում է ցատկել HIGH- ի և LOW- ի միջև ՝ նախքան անգործուն վիճակի գալը: Այսպիսով, ձևացնում է, թե այն մի քանի անգամ սեղմվել է, ինչը խնդիրներ է առաջացնում: Այսպիսով, ինչ պետք է անենք:
Այստեղ ես ուզում եմ նշել, որ այս օրինակում մենք կօգտագործենք արտաքին ընդհատում `կոճակի սեղմումը հայտնաբերելու համար: Այսպիսով, կոճակի սեղմումը հայտնաբերելուց հետո մենք պետք է սպասենք մի փոքր ժամանակ, ինչպես 50 մՍ -ը, որպեսզի հասնենք պարապ վիճակի և նորից ստուգենք `կոճակը անգործուն վիճակում է, թե ոչ: Եթե այն անգործուն վիճակում է, ապա մենք կարող ենք շարունակել մեր խնդիրը: Այսպիսով, եկեք տեսնենք ծածկագիրը:)
Քայլ 3: STM32CubeMX կազմաձևում
Այսպիսով, մենք պետք է նախ միացնենք արտաքին ընդհատումը մեր կոճակի համար (այստեղ ենթադրում եմ, որ դուք օգտագործում եք STM32F407VG հայտնագործման տախտակը).
- «Pinout & Configuration» ներդիրում սեղմեք սեղմիչ կոճակին միացված PA0 պին և ընտրեք GPIO_EXTI0, որը հնարավորություն է տալիս արտաքին ընդհատում կատարել այդ քորոցում:
- Փնջի «օգտվողի պիտակը» փոխեք «Push_Button» կամ ձեր ուզածի:
Այնուհետև, մենք պետք է կազմաձևենք ժմչփը `50mS ժամանակային հետաձգում ստեղծելու համար.
- Մուտքագրեք «ersամաչափեր» բաժինը
- Կտտացրեք TIM1- ին
- Որպես ժամացույցի աղբյուր ընտրեք «Ներքին ժամացույց»
-
Կազմաձևով (Եթե ցանկանում եք հասկանալ այս բաժինը, դիմեք այս ձեռնարկին, որը շատ խորհուրդ է տրվում "Servo Motor Control With STM32F4 ARM MCU"):
- Նախնական սակագինը սահմանեք 32000
- Եվ հակակշիռը մինչև 50
- «NVIC կարգավորումներ» ներդիրում միացրեք բոլոր ընդհատումները
Միացնել LED- ը որպես ելք.
Կտտացրեք PD12- ին և նշեք որպես «GPIO_Output»
Այնուհետև կազմաձևեք ժամացույցը, ինչպես պատկերված է վերևում և ստեղծեք ծածկագիրը:
Քայլ 4. Keil ծրագրաշարի մշակում
Նախ, մենք սահմանում ենք վիճակի փոփոխական, որը կապահովի, որ ժամաչափը չսկսենք արտաքին ընդհատման ներսում, երբ վերադարձը տեղի է ունենում.
/ * USER CODE BEGIN PFP */bool state = true; / * USER CODE END PFP */
Այնուհետև, մենք գրում ենք ISR արտաքին ընդհատման համար.
անվավեր HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); վիճակ = կեղծ; } else {_NOP (); }}
Երբ կոճակը սեղմվում է, մենք ստուգում ենք, արդյոք դա մեր սահմանված կոճակն էր և արդյոք վիճակը ճիշտ է: Սկզբում վիճակը ճիշտ կլինի, եթե if հայտարարությունը մուտքագրվի: Մտնելուց հետո մենք սկսում ենք ժմչփը և վիճակը կեղծ ենք դարձնում `համոզվելու համար, որ վերադարձը չի վերսկսի ժամաչափը:
Այնուհետեւ, մենք գրում ենք ISR ժամանակաչափի ընդհատման համար.
անվավեր HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *Կանխել չօգտագործված փաստարկների (ներ) կազմման նախազգուշացումը * / Չօգտագործված (htim);
/* Ո NOTՇԱԴՐՈԹՅՈՆ. Այս գործառույթը չպետք է փոփոխվի, երբ անհրաժեշտ է հետադարձ կապ, HAL_TIM_PeriodElapsedCallback- ը կարող է իրականացվել օգտվողի ֆայլում */ եթե (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPI12); վիճակ = ճշմարիտ; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * ՕԳՏԱԳՈՐԻՉԻ ՎԵՐ END 4 *//
50mS- ից հետո մենք ստուգում ենք, արդյոք կոճակը դեռ վերականգնված վիճակում է, թե ազատված է, եթե այո, ապա մենք գիտենք, որ այդ կոճակը անգործուն վիճակում է: Այնուհետև մենք միացնում ենք լուսարձակը, դարձնում վիճակը ճշմարիտ, որպեսզի կարողանանք այլ կոճակ սեղմել և դադարեցնել ժամաչափը, որպեսզի կարողանանք նորից սկսել:
Այսպիսով, այս գործընթացը կապահովի, որ մենք կանխենք ցատկման հարցը:
Քայլ 5: Եզրակացություն
Սա կոճակի հեռացման կոդն էր: Ուզում եմ նշել, որ այս ծածկագիրը մշակվել է իմ կողմից, և ես փորձագետ ծրագրավորող չեմ: Այսպիսով, անշուշտ, կարող են լինել սխալներ: Եթե ունեք ավելի լավ լուծում, նշեք այն: Մի մոռացեք, եթե որևէ խնդրի հանդիպեք, գրեք ինձ, և ես կփորձեմ օգնել:
Խորհուրդ ենք տալիս:
Բջջային լրիվ լիցքավորման ավտոմատ անջատում `20 քայլ
Բջջային լրիվ լիցքավորման ավտոմատ անջատում. Բջջային հեռախոսի լիցքավորման ավտոմատ անջատում ամբողջությամբ լիցքավորվելուց հետո: Անհրաժեշտ չէ անհանգստանալ մարտկոցի կյանքից, նույնիսկ եթե այն թողել եք ամբողջ գիշեր: Բջջային հեռախոսները աշխատում են մարտկոցներով: Չնայած մարտկոցները հարմար են օգտագործման համար, դրանց օգտագործումը նույնպես որոշակի նախազգուշական միջոցների կարիք ունի: Մի մա
ՊՆ ՝ Ender 3 LCD լուսարձակի միացում/անջատում ՝ 6 քայլ
ՊՆ ՝ Ender 3 LCD լուսարձակի միացում/անջատում. Գիշերային ժամերին ցուցադրվող լույսի միացման/անջատման ցուցադրման ռեժիմ: Այժմ կարող եք անջատել հետևի լույսը
Creality Ender 3 հոսանքի անջատում. 3 քայլ
Creality Ender 3 Power Shutoff: Բարև, ուրեմն հիմնականում մի օր ես ստիպված էի հեռանալ կարճ տպագիր սկսելուց հետո: Ամբողջ օրը ես մտածում էի, թե ինչպես է տպիչը նստած այնտեղ ոչինչ չանելով և էլեկտրաէներգիա սպառելով: Այսպիսով, ես մտածեցի մի պարզ սխեմայի մասին, որը պետք է անջատվի ցանցից հետո, երբ տպվելը
Կեղտ էժան ATtiny-85 Tv-B-Gone (անջատում է ցանկացած հեռուստատեսություն), Plus Arduino As Isp: 4 քայլ
Dirt Cheap ATtiny-85 Tv-B-Gone (անջատում է ցանկացած հեռուստատեսություն!), Plus Arduino As Isp. Գրանցվեք իմ «Էլեկտրոնիկա մի խոսքով» դասընթացին այստեղ ՝ https://www.udemy.com/electronics-in-a -nutshell/? couponCode = TINKERSPARK Դիտեք նաև իմ YouTube- ի ալիքը այստեղ ՝ ավելի շատ նախագծերի և էլեկտրոնիկայի ձեռնարկների համար ՝ https://www.youtube.com/channel/UCelOO
ESP8266 սարքով համակարգչի հեռակա անջատում կամ վերագործարկում. 10 քայլ (նկարներով)
Հեռակա անջատում կամ համակարգչի վերագործարկում ESP8266 սարքով. Այստեղ պարզ լինելու համար մենք փակում ենք ձեր համակարգիչը, այլ ոչ թե ուրիշի համակարգիչը: Պատմությունը հետևյալն է. Ֆեյսբուքում իմ ընկերը ինձ հաղորդագրություն ուղարկեց և ասաց, որ ունի տասնյակ համակարգիչներ, որոնք աշխատում են մաթեմատիկայի փունջ, բայց ամեն առավոտ առավոտյան 3 -ին նրանք փակվում են: Ս