Агуулгын хүснэгт:
- Алхам 1: Кофены машины дэлгэцийн дэлгэцийн функцын танилцуулга
- Алхам 2: STONE дэлгэцийн UI зургийг хий
- Алхам 3: STM32F103RCT6
- Алхам 4: UART цуваа
- Алхам 5: Таймер
- Алхам 6: ажиглагч нохой
Видео: STONE дэлгэц +STM32 +кофе чанагч: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:00
Би MCU програм хангамжийн инженер, саяхан авсан төсөл бол кофены машин, өрхийн шаардлага, мэдрэгчтэй дэлгэцтэй, үйл ажиллагаа нь сайн, дэлгэцийн дээр байгаа сонголт тийм ч сайн биш байж магадгүй, аз болоход энэ төсөл юу болохыг би шийдэж чадна. Өөрийгөө ашиглахын тулд MCU нь ямар дэлгэцийг сонгоход бас ашиглагддаг тул би STM32 -ийн энэ төрлийн энгийн бөгөөд хялбар MCU -ийг сонгосон, дэлгэцийг сонгохдоо STONE -ийн мэдрэгчтэй дэлгэцийг сонгосон, дэлгэц нь энгийн бөгөөд ашиглахад хялбар, Миний STM32 MCU нь зөвхөн UART холболтоор дамждаг.
MCU -ийн цуваа портоор харилцах боломжтой STONE цуврал LCD дэлгэц. Үүний зэрэгцээ энэхүү дэлгэцийн UI интерфейсийн логик дизайныг STONE -ийн албан ёсны вэбсайтаас өгсөн STONE TOOL Box ашиглан шууд зохион бүтээх боломжтой бөгөөд энэ нь маш тохиромжтой юм. Тиймээс би үүнийг энэхүү кофены машины төсөлд ашиглах гэж байна. Үүний зэрэгцээ би үндсэн хөгжүүлэлтийг л бичих болно. Энэ бол миний компанийн төсөл учраас би зөвхөн энгийн демо бичиж, кодыг бүрэн бичихгүй. Чулуун дэлгэцийн талаархи зарим үндсэн хичээлүүд нь вэбсайт руу орж болно: https://www.stoneitech.com/ Вэбсайт нь загвар, хэрэглээ, дизайны баримт бичиг, видео хичээлийн талаар янз бүрийн мэдээлэлтэй байдаг. Би энд нэг их дэлгэрэнгүй ярихгүй.
Алхам 1: Кофены машины дэлгэцийн дэлгэцийн функцын танилцуулга
Энэхүү төсөл нь дараах чиг үүргийг гүйцэтгэдэг: l
- Одоогийн цаг, огноог харуулна
- Дэлгэц дээр американо, латте, капучино, эспрессо гэсэн дөрвөн товчлуур бий.
- Үлдсэн кофены үр, сүү, кофены сахарын хэмжээг харуулна
- Текст харуулах хайрцаг нь одоогийн төлөвийг харуулна
Эдгээр ойлголтыг харгалзан та UI интерфэйсийг зохион бүтээх боломжтой. UI дизайн дахь STONE мэдрэгчтэй дэлгэц нь харьцангуй энгийн бөгөөд хэрэглэгч нь PhotoShop програм хангамжийн тусламжтайгаар сайн интерфэйс, товчлуурын эффект, STONE TOOL Box -ээр дамжуулан дэлгэцэн дээр сайн зураг зурж, STONE TOOL Box логиктой өөрийн товчлууруудыг нэмдэг. Цуваа өгөгдөл, өгөөжийн утга нь сайн, үүнийг боловсруулахад маш хялбар байдаг.
Алхам 2: STONE дэлгэцийн UI зургийг хий
Функциональ шаардлагын дагуу би дараах хоёр UI дэлгэцийн интерфэйсийг хийсэн бөгөөд нэг нь үндсэн интерфэйс, нөгөө нь товчлуурын эффект юм.
STONE TOOL Box -ийг ашиглах Одоогоор STONE нь TOOL -ийг хангаж байна. Шинэ хэрэгсэл үүсгэхийн тулд энэ хэрэгслийг нээгээд зураг харуулахын тулд зохион бүтээсэн интерфэйсийг оруулж, өөрийн товчлуур, текст харуулах хайрцаг гэх мэтийг нэмж оруулаарай. STONE -ийн албан ёсны вэбсайт дээр энэ програмыг хэрхэн ашиглах талаар маш бүрэн заавар байдаг: https:/ /www.stoneitech.com/support/download/video
STONE TOOL Box дотор товчлуур нэмж, бүрэлдэхүүн хэсгүүдийг харуулсны үр нөлөө дараах байдалтай байна.
STONE TOOL Box нь симуляцийн дэлгэцийн функцтэй бөгөөд үүгээр дамжуулан интерфэйсийн интерфейсийн үйл ажиллагааны үр нөлөөг харж болно.
Энэ үед миний UI дэлгэц дууссан бөгөөд миний хийх ёстой зүйл бол MCU кодыг бичих явдал юм. STONE TOOL Box -оос үүсгэсэн файлуудыг дэлгэцэн дээр татаж аваад бодит үр дүнг харах боломжтой болно.
Алхам 3: STM32F103RCT6
STM32F103RCT6 MCU нь хүчирхэг функцуудтай. MCU -ийн үндсэн параметрүүдийг энд харуулав.
- Цуврал: STM32F10X l Kerne
- ARM - COTEX32
- Хурд: 72 МГц
- Харилцааны интерфейс: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
- Захын тоног төхөөрөмж: DMA, хөдөлгүүрийн хяналтын ХОУХД, PDR, POR, PVD, ХОУХ, температур мэдрэгч, WDT
- Хөтөлбөрийн хадгалах багтаамж: 256 KB
- Програмын санах ойн төрөл: FLASH
- RAM багтаамж: 48K
- Хүчдэл - цахилгаан хангамж (Vcc/Vdd): 2 V ~ 3.6 V
- Осциллятор: дотоод
- Ашиглалтын температур: -40 ° C ~ 85 ° C
- Багц/орон сууц: 64 амьдрал
Энэ төсөлд би UART, GPIO, Watch Dog, STM32F103RCT6 таймерыг ашиглах болно. Эдгээр дагалдах хэрэгслийн хөгжлийг доор баримтжуулсан болно. STM32 нь танд огт танихгүй Keil MDK програм хангамжийг ашигладаг тул би энэ програмыг суулгах аргыг танилцуулахгүй. STM32-ийг j-link эсвэл st-link болон бусад симуляцийн хэрэгслээр онлайнаар дуурайж болно. Дараах зураг бол миний ашигласан STM32 хэлхээний самбар юм.
Алхам 4: UART цуваа
STM32F103RCT6 нь хэд хэдэн цуваа порттой. Энэ төсөлд би PA9/PA10 цуваа портын сувгийг ашигласан бөгөөд цуваа портын дамжуулалтын хурдыг 115200 гэж тогтоосон.
GPIO
Энэхүү төслийн хэрэглэгчийн интерфейс дээр нийт дөрвөн товчлуур байдаг бөгөөд энэ нь үнэндээ дөрвөн төрлийн кофе үйлдвэрлэдэг. Кофены машинд кофены шошны тоо, сүүний хэрэглээ, янз бүрийн кофены усны урсгалыг хянах нь мэдрэгч, реле зэргийг хянах замаар хийгддэг бол би эхлээд GPIO зүүг удирддаг.
Алхам 5: Таймер
Таймерыг эхлүүлэхдээ давтамжийн хуваагдлын коэффициентийг зааж өгнө үү, энд манай системийн цаг (72MHz) давтамжийн хуваагдал байна.
Дараа нь arr -ийг дахин ачаалах утгыг зааж өгнө үү, энэ нь манай таймер энэ массивт хүрэх үед таймер бусад утгыг дахин ачаална гэсэн үг юм.
Жишээлбэл, бид таймерыг тоолохоор тохируулах үед таймерын тооллын утга нь arr -тэй тэнцүү бөгөөд үүнийг 0 -ээр арилгаж дахин тооцоолох болно.
Таймерын тоог дахин ачаалж, нэг удаа Шинэчлэлт хийнэ
Шинэчлэх цагийн томъёог тооцоолно уу Tout = ((arr +1)*(PSC +1))/Tclk
Томъёоны гарал үүсэл: Ярилцлага бол таймерын цагийн эх үүсвэр бөгөөд энд 72 МГц байна
Бид хуваарилагдсан цагийн давтамжийг хувааж, давтамжийн хуваагдлын утгыг PSC гэж тодорхойлж, дараа нь бидний яриаг PSC +1 болгон хуваадаг, манай таймерын эцсийн давтамж нь Tclk/(PSC +1) MHz
Энд давтамж гэж юу хэлэх гээд байна вэ гэхээр бидэнд PSC +1 M Тоонууд дээр 1s яриа байдаг (1M = 10 ^ 6), дугаар тус бүрийн цаг нь PSC +1 /Talk байдаг бөгөөд урвуу гэдгийг ойлгоход хялбар байдаг. давтамжийн үе нь үе бөгөөд энд байгаа тоо бүрийн хугацаа нь PSC +1 /Яриа секунд бөгөөд дараа нь бид 0 -ээс arr хүртэл (arr +1)*(PSC +1) /Tclk болно.
Жишээлбэл arr = 7199, PSC = 9999 гэж тохируулъя
Бид 72 МГц -ийг 9999 болгон хуваасан+1 нь 7200 Гц -тэй тэнцүү байна
Энэ нь секундэд 9000 тоо, тоолох бүр нь 1/7, 200 секунд юм
Бид энд таймерын шинэчлэлт (7199+1)*(1/7200) = 1s рүү орохын тулд 9000 тоог бичиж байна, тэгэхээр 1s нь шинэчлэлт рүү орно.
хүчингүй TIM3_Int_Init (u16 arr, u16 psc) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3, ИДЭВХЖҮҮЛЭХ);
// цаг 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);
Хэрэв танд бүрэн журам хэрэгтэй бол бидэнтэй холбоо барина уу.
www.stoneitech.com/contact
Би танд 12 цагийн дотор хариу өгөх болно.
Алхам 6: ажиглагч нохой
Хөтөлбөр ажиллаж байх үед систем сүйрэхээс урьдчилан сэргийлэхийн тулд би хамгаалагчийг нэмсэн. Чухамдаа MCU ашигладаг бүх төслүүд ерөнхийдөө харуулын нохой ашигладаг.
STM32 нь хоёр хамгаалагч нохойтой бөгөөд аюулгүй байдал, цаг хугацааны нарийвчлал, уян хатан байдлыг хангадаг. Програм хангамжийн алдаанаас үүдэлтэй алдааг олж илрүүлэхийн тулд хоёр харуулын төхөөрөмжийг (бие даасан харуул хамгаалалт, цонхны хамгаалагч) ашиглаж болно. Тоолуур нь цаг хугацааны тодорхой утгад хүрэхэд тасалдал (зөвхөн цонхны ажиглагч) эсвэл системийн шинэчлэлтийг идэвхжүүлдэг. Бие даасан харуулын нохой (IWDG):
Зориулалтын бага хурдтай цаг (LSI) -ээр удирддаг бөгөөд мастер цаг ажиллахгүй байсан ч ажилладаг.
Энэ нь харуулын нохой үндсэн програмаас гадуур бие даан ажиллах шаардлагатай бөгөөд бага нарийвчлалтай байхыг шаарддаг нөхцөлд ашиглахад тохиромжтой. Цонхны ажиглагч (WWDG):
Давтамж хуваагдсаны дараа APB1 -ээс цагийг удирддаг. Тохируулах цагийн цонхоор ер бусын хоцрогдсон эсвэл дутуу програмын ажиллагааг илрүүлэх. Windows -ийг яг цаг хугацаанд нь ажиллуулахын тулд ажиглагчдыг шаарддаг програмуудад тохиромжтой.
int main (хүчингүй) {
delay_init ();
// хойшлуулах init NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
// NVIC INIT uart_init (115200);
// UART INIT PAD_INIT ();
// Light Init IWDG_Init (4, 625);
байхад (1) {
хэрэв (USART_RX_END)
{шилжүүлэгч (USART_RX_BUF [5])
{
Эспрессо хайрцаг:
CoffeeSelect (Espresso, USART_RX_BUF [8]);
завсарлага;
Кейс Американо:
CoffeeSelect (Americano, USART_RX_BUF [8]);
Үндсэн функцын үндсэн логик нь дараах байдалтай байна.
u8 timer_cnt = 0;
хүчингүй TIM3_IRQHandler (хүчингүй) // TIM3
{
хэрэв (TIM_GetITStatus (TIM3, TIM_IT_Update)! = ДАХИН тохируулах)
{
TIM_ClearITPendingBit (TIM3, TIM_IT_Update);
timer_cnt ++;
хэрэв (timer_cnt> = 200)
{
milk_send [6] = сүү ();
Эцэст нь, таймер тасалдалд кодыг нэмнэ үү: Таймер тасалдахад миний зорилго бол хэр их кофе, сүү үлдсэнийг шалгаж, илрүүлсэн утгыг цуваа портоор дамжуулан дэлгэцийн дэлгэц рүү илгээх явдал юм. Сүү, кофены шошны үлдэгдлийг хэмжих ажлыг ихэвчлэн мэдрэгч хийдэг. Энгийн аргууд нь даралтын мэдрэгчийг агуулдаг бөгөөд энэ нь сүү, кофены өнөөгийн жинг хэмжиж, хичнээн их үлдсэнийг тодорхойлдог.
Сүүлд нь бичээрэй
Энэ нийтлэлд зөвхөн миний төслийн энгийн хөгжлийн явцыг бичсэн болно. Компанийн төслийн нууцлалыг харгалзан миний ашигладаг UI дэлгэцийн интерфэйсийг энэ төслийн жинхэнэ UI дэлгэцийн интерфейс биш харин өөрөө хийсэн болно. STM32 кодын хэсэг нь зөвхөн MCU -ийн захын драйвер болон холбогдох логик кодыг нэмдэг. Компанийн төслийн нууцлалыг харгалзан технологийн тодорхой хэсгийг өгөхгүй байна. Гэсэн хэдий ч миний өгсөн кодын дагуу STONE дэлгэцтэй хамтран ажиллаарай. Програм хангамжийн инженерүүд болох найз нөхөд маань төслийг дуусгахын тулд миний кодын хүрээнд техникийн гол хэсгүүдийг нэмж оруулахын тулд хэдхэн хоног зарцуулах хэрэгтэй.
Төслийн талаар илүү ихийг мэдэхийг хүсвэл энд дарна уу