Mündəricat:
- Addım 1: Qəhvə Maşını Ekran Ekranı Funksiyasına Giriş
- Addım 2: STONE Display üçün UI şəkilləri hazırlayın
- Addım 3: STM32F103RCT6
- Addım 4: UART Serialı
- Addım 5: Taymer
- Addım 6: Watch Dog
Video: STONE Display +STM32 +Coffee Maker: 6 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Mən MCU proqram mühəndisiyəm, bu yaxınlarda bir layihə qəhvə maşını olmaqdır, toxunma ekranı ilə ev tələbləri, funksiyası yaxşıdır, ekranın üstündə seçim çox yaxşı olmaya bilər, xoşbəxtlikdən bu layihəyə nəyə qərar verə bilərəm Özümdən istifadə etmək üçün MCU, ekranın nə olduğuna qərar vermək üçün də istifadə edilə bilər, buna görə STM32 -dən istifadə etmək üçün bu cür sadə və asan MCU -nu seçdim, ekranı STONE -in sensorlu ekranını seçdim, ekran sadə və istifadəsi asandır, Mənim Yalnız UART vasitəsilə STM32 MCU ilə əlaqə qurmaq yaxşıdır.
MCU -nun serial portu vasitəsi ilə ünsiyyət qura bilən STONE seriyalı LCD ekran. Eyni zamanda, bu ekran ekranının UI interfeysinin məntiq dizaynı, STONE -un rəsmi internet saytı tərəfindən təmin edilən STONE TOOL Box istifadə edərək birbaşa dizayn edilə bilər ki, bu da çox əlverişlidir. Buna görə də bu qəhvə maşını layihəsi üçün istifadə edəcəyəm. Eyni zamanda, sadəcə əsas inkişafı qeyd edəcəyəm. Bu mənim şirkətimin bir layihəsi olduğu üçün yalnız sadə bir demo yazacağam və tam kodu yazmayacağam. Daş ekran ekranı ilə bağlı bəzi əsas dərslər veb sayta daxil ola bilər: https://www.stoneitech.com/ Veb saytın modeli, istifadəsi və dizayn sənədləri, video dərsləri haqqında müxtəlif məlumatlar var. Burada çox detala girməyəcəyəm.
Addım 1: Qəhvə Maşını Ekran Ekranı Funksiyasına Giriş
Bu layihə aşağıdakı funksiyalara malikdir: l
- Cari vaxtı və tarixi göstərir
- Ekranda americano, latte, cappuccino və espresso üçün dörd düymə var.
- Qalan qəhvə dənələri, süd və qəhvə şəkərinin cari miqdarını göstərir
- Mətn ekran qutusu mövcud vəziyyəti göstərir
Bu anlayışları nəzərə alaraq bir UI interfeysi dizayn edə bilərsiniz. İstifadəçi interfeysi dizaynındakı STONE ekranları nisbətən sadədir, istifadəçi PhotoShop proqramından istifadə edərək yaxşı UI interfeysi və düymə effekti, STONE TOOL Box vasitəsilə ekrana yaxşı şəkillər çəkmək və öz düymələrini STONE TOOL Box məntiqi ilə əlavə etmək və seriya məlumatları, geri dönüş dəyəridir, inkişaf etdirmək çox asandır.
Addım 2: STONE Display üçün UI şəkilləri hazırlayın
Funksional tələblərə görə, aşağıdakı iki UI ekran interfeysi hazırladım, biri əsas interfeys, digəri isə düymə effekti.
STONE TOOL Box istifadə Hal hazırda STONE TOOL təmin edir. Yeni bir layihə yaratmaq üçün bu TOOL -u açın, sonra şəkilləri göstərmək üçün dizayn edilmiş UI -ni idxal edin və öz düymələrinizi, mətn göstərmə qutularınızı və s. Əlavə edin. STONE -in rəsmi internet saytında bu proqramdan istifadə haqqında çox mükəmməl bir dərs var: https:/ /www.stoneitech.com/support/download/video
STONE TOOL Box -da düymələr əlavə etmənin və komponentlərin göstərilməsinin təsirləri belədir:
STONE TOOL Box, UI interfeysinin iş effektini görə biləcəyiniz simulyasiya ekranı funksiyasına malikdir:
Bu nöqtədə, UI ekranım tamamlandı və etməli olduğum şey MCU kodunu yazmaqdır. Həqiqi nəticələri görmək üçün STONE TOOL Box tərəfindən yaradılan faylları ekrana endirin.
Addım 3: STM32F103RCT6
STM32F103RCT6 MCU güclü funksiyalara malikdir. MCU -nun əsas parametrləri:
- Seriya: STM32F10X l Kerne
- QOL - COTEX32
- Sürət: 72 MHz
- Rabitə interfeysi: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
- Periferik avadanlıqlar: DMA, motor idarəetmə PWM, PDR, POR, PVD, PWM, temperatur sensoru, WDT
- Proqramın saxlama həcmi: 256 KB
- Proqram yaddaş növü: FLASH
- RAM tutumu: 48K
- Gərginlik - enerji təchizatı (Vcc/Vdd): 2 V ~ 3.6 V
- Osilator: daxili
- İşləmə temperaturu: -40 ° C ~ 85 ° C
- Paket/mənzil: 64 ömür
Bu layihədə UART, GPIO, Watch Dog və STM32F103RCT6 Timer istifadə edəcəyəm. Bu ətraf qurğuların inkişafı aşağıda sənədləşdirilmişdir. STM32 sizin üçün heç də qəribə olmayan Keil MDK proqram inkişafından istifadə edir, ona görə də bu proqramın quraşdırılma metodunu təqdim etməyəcəyəm. STM32 onlayn olaraq j-link və ya st-link və digər simulyasiya vasitələri ilə simulyasiya edilə bilər. Aşağıdakı şəkil istifadə etdiyim STM32 sxemidir:
Addım 4: UART Serialı
STM32F103RCT6 bir neçə seriyalı porta malikdir. Bu layihədə PA9/PA10 seriyalı port kanalından istifadə etdim və serial port baud dərəcəsi 115200 olaraq təyin edildi.
GPIO
Bu layihənin istifadəçi interfeysində əslində dörd növ qəhvə hazırlayan dörd düymə var. Qəhvə maşınında, müxtəlif qəhvələrin qəhvə dənələrinin sayını, süd istehlakını və su axını idarə etmək, əslində sensorlar və röleləri idarə etməklə həyata keçirilir, mən isə əvvəlcə GPIO pinini idarə edirəm.
Addım 5: Taymer
Taymeri işə salarkən, PSC tezlik bölgüsü əmsalını təyin edin, burada tezlik bölgüsü üçün sistem saatımız (72MHz)
Ardından, yenidən yükləmə dəyərini təyin edin, yəni timerimiz bu sıraya çatdıqda, taymer digər dəyərləri yenidən yükləyəcək.
Məsələn, sayğacı saymaq üçün təyin etdiyimiz zaman, taymer sayının dəyəri arr -a bərabərdir və 0 ilə silinəcək və yenidən hesablanacaq
Taymer sayı yenidən yüklənir və bir dəfə Yeniləmədir
Tout = ((arr +1)*(PSC +1))/Tclk Güncelleme vaxt formulunu hesablayın
Formula törəməsi: Danışıq taymerin saat mənbəyidir, burada 72Mhz
Ayrılmış saat tezliyini bölürük, tezlik bölgüsü dəyərini PSC olaraq təyin edirik, sonra Söhbətimizi PSC +1 -ə bölürük, timerimizin son tezliyi Tclk/(PSC +1) MHz -dir
Buradakı tezlik dedikdə, PSC +1 M Nömrələri üzərində 1s Söhbətimiz var (1M = 10 ^ 6) və hər ədədin vaxtı PSC +1 /Söhbətdir və bunun tərs olduğunu başa düşmək asandır tezliyin müddəti dövrdür və burada hər bir nömrə üçün dövr PSC +1 /Danışıq saniyəsidir və sonra 0 -dan arr -a keçdiyimiz zaman (arr +1)*(PSC +1) /Tclk
Məsələn, arr = 7199 və PSC = 9999 təyin edək
72MHz -i 9999 -a böldük+1, 7200Hz -ə bərabərdir
Bu saniyədə 9000 sayımdır və hər sayım saniyənin 1/7.200 -üdür
Taymer yeniləməsinə (7199+1)*(1/7200) = 1s getmək üçün burada 9000 Nömrəni qeyd edirik, beləliklə 1s bir yeniləməyə gedir.
boş TIM3_Int_Init (u16 arr, u16 psc) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3, ENABLE);
// saat TIM_TimeBaseStructure. TIM_Period = arr;
TIM_TimeBaseStructure. TIM_Prescaler = psc; TIM_TimeBaseStructure. TIM_ClockDivision = 0;
// TDTS = Tck_tim TIM_TimeBaseStructure. TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit (TIM3, & TIM_TimeBaseStructure);
Tam bir prosedura ehtiyacınız varsa, bizimlə əlaqə saxlayın:
www.stoneitech.com/contact
12 saat ərzində sizə cavab verəcəyəm.
Addım 6: Watch Dog
Proqram işləyərkən sistemin çökməsinin qarşısını almaq üçün gözətçini əlavə etdim. Əslində, MCU istifadə edən bütün layihələr ümumiyyətlə bir gözətçi istifadə edir.
STM32, daha çox təhlükəsizlik, vaxt dəqiqliyi və rahatlıq təmin edən iki daxili gözətçiyə malikdir. Proqram səhvlərindən yaranan arızaları aşkar etmək və aradan qaldırmaq üçün iki gözətçi cihazı (müstəqil gözətçi və pəncərə gözətçisi) istifadə edilə bilər. Sayğac müəyyən bir zaman aşımı dəyərinə çatdıqda bir fasilə (yalnız pəncərə gözətçisi) və ya sistemin sıfırlanması işə salınır. Müstəqil gözətçi (IWDG):
Xüsusi aşağı sürətli bir saat (LSI) tərəfindən idarə olunan, ana saat uğursuz olsa belə işləyir.
Gözətçinin əsas proqram xaricində tamamilə müstəqil işləməsi və aşağı vaxt dəqiqliyi tələb etdiyi vəziyyətlərdə istifadə üçün uyğundur. Pəncərə gözətçisi (WWDG):
Tezlik bölgüsündən sonra APB1 saatından idarə olunur. Konfiqurasiya edilə bilən bir vaxt pəncərəsi ilə anormal olaraq gec və ya erkən tətbiq əməliyyatını aşkar edin. Windows -un dəqiq vaxtında işləməsi üçün gözətçilər tələb edən proqramlar üçün uyğundur.
int main (void) {
delay_init ();
// gecikmə init NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
// NVIC INIT uart_init (115200);
// UART INIT PAD_INIT ();
// Light Init IWDG_Init (4, 625);
isə (1) {
əgər (USART_RX_END)
{keçid (USART_RX_BUF [5])
{
halda Espresso:
CoffeeSelect (Espresso, USART_RX_BUF [8]);
fasilə;
halda Americano:
CoffeeSelect (Americano, USART_RX_BUF [8]);
Əsas funksiyada əsas məntiq belədir:
u8 timer_cnt = 0;
boş TIM3_IRQHandler (boş) // TIM3
{
əgər (TIM_GetITStatus (TIM3, TIM_IT_Update)! = SIFIRLA)
{
TIM_ClearITPendingBit (TIM3, TIM_IT_Update);
timer_cnt ++;
əgər (timer_cnt> = 200)
{
milk_send [6] = süd ();
Nəhayət, sayğac fasiləsinə kodu əlavə edin: Taymer fasiləsində məqsədim nə qədər qəhvə və südün qaldığını yoxlamaq və sonra aşkar edilmiş dəyəri seriyalı port vasitəsilə ekran ekranına göndərməkdir. Süd və qəhvə dənələrinin nə qədər qaldığını ölçmək adətən sensorlar tərəfindən aparılır. Sadə üsullar, nə qədər qaldığını müəyyən etmək üçün süd və qəhvə dənələrinin hazırkı çəkisini ölçən təzyiq sensörlərini əhatə edir.
Sonda yaz
Bu yazı yalnız layihəmin sadə inkişaf prosesini qeyd edir. Şirkətin layihəsinin məxfiliyini nəzərə alaraq istifadə etdiyim UI ekran interfeysi də bu layihənin əsl UI ekran interfeysi deyil, özüm tərəfindən hazırlanmışdır. STM32 kod hissəsi yalnız MCU -nun periferik sürücüsünü və əlaqəli məntiq kodunu əlavə edir. Həmçinin şirkətin layihəsinin məxfiliyini nəzərə alaraq, xüsusi əsas texnologiya hissəsi verilmir, zəhmət olmasa anlayın. Ancaq verdiyim koda görə, STONE ekranı ilə əməkdaşlıq edin. həm də proqram mühəndisi olan dostlarımın layihəni başa çatdırmaq üçün kod çərçivəmə əsas texniki hissələri əlavə etmək üçün bir neçə gün sərf etmələri lazımdır.
Layihə haqqında daha çox məlumat əldə etmək üçün bura vurun