Merhaba arkadaşlar, Bu yazımda sizlerle STM32VLDISCOVERY kartını kullanarak LCD sürme kodlarını paylaşacağım. Kodları gitHub'dan buldum bir kaç küçük düzeltme yaptım ve yapmaya devam da edeceğim, linkini bırakıyorum. https://github.com/applefreak/STM32-HD44780 Öncelikle şunu belirtmek isterim ki, bu yazıyı okumadan önce PIC,Arduino vs. ile LCD kullandığınızı varsayıyorum. Paylaşacağım kodlara göre aşağıdaki bağlantıları yapmanız gerekiyor. RS -----> Pin C0 EN -----> Pin C1 RW -----> Toprak D4 -----> Pin C4 D5 -----> Pin C5 D6 -----> Pin C6 D7 -----> Pin C7 Aşağıda paylaşacağım kodları lcd.c ve lcd.h isimli iki dosya oluşturup içine kaydetmeliyiz. Daha sonra bu dosyaları projemizin bulunduğu klasörün içine atmalıyız. Kütüphanenin projeye dahil edilmesi ve kullanılması ile ilgili çektiğimi YouTube videom aşağıda,
Bu yazımda sizlerle yeni bulduğum ve sağlıklı olduğunu düşündüğüm bir delay kütüphanesi paylaşacağım. Daha önce paylaşmış olduğum delay fonksiyonu çok sağlıklı değildi , fakat bu paylaşacağım kütüphane, sistem saatini kullanmakta ve bu yüzden de tam sonuç vermekte. delay.c
// Delay functions using SysTick timer// Minimal delay length is 1ms#include "delay.h"// Delay counterstatic __IO uint32_t DelayCounter;
// SysTick interrupt handlervoidSysTick_Handler(void) {
DelayCounter++;
}
// Initialize delay functions// note: configures the SysTick counter, must be called each time when the core// clock has been changedvoiddelay_init(void) {
// Set reload register to generate IRQ every millisecond
SysTick->LOAD = (uint32_t)(SystemCoreClock / (1000UL-1UL));
// Set priority for SysTick IRQ
NVIC_SetPriority(SysTick_IRQn,(1<< __NVIC_PRIO_BITS) -1);
// Set the SysTick counter value
SysTick->VAL =0UL;
// Set SysTick source and IRQ
SysTick->CTRL = (SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk);
}
// Do a delay for a specified number of milliseconds// input:// ms - number of milliseconds to waitvoiddelay_ms(uint32_t ms) {
// Enable the SysTick timer
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
// Wait for a specified number of milliseconds
DelayCounter =0;
while (DelayCounter < ms);
// Disable the SysTick timer
SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}
// Do a delay for a specified number of milliseconds, MCU in sleep mode// input:// ms - number of milliseconds to wait// note: all wake-up flags must be cleared before calling this function// to ensure proper sleep during delayvoiddelaysleep_ms(uint32_t ms) {
// Enable the SysTick timer
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
// Set delay counter
DelayCounter =0;
// Wait for a specified number of millisecondswhile (DelayCounter < ms) {
__WFI();
}
// Disable the SysTick timer
SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}
#include "delay.h"uint32_t TimingDelay;
voidSysTick_Handler(void) // Her 1ms'de bir olusacak kesmeyi yakaladigimiz fonksiyonumuz
{
if (TimingDelay !=0) // TimingDelay'in degeri sifirdan farkli ise çalistir.
{
TimingDelay --; //TimingDelay'in degeri bir azaltir.
}
}
voiddelay_ms(__IO uint32_t time) // Delay Fonksiyonumuz
{
TimingDelay = time; //Kesme fonksiyonunda kullanacagimiz degiskenin degerini ayarliyoruzwhile(TimingDelay !=0); //TimingDelay degiskeninin degeri sifirdan farkli oldugu sürece döngüde kal.
}
voiddelay_init(void)
{
SystemInit();
SysTick_Config(SystemCoreClock/1000);
}
Bu iki dosyayı oluşturduktan (ister üstteki ister alttaki) sonra kullanmak istediğimiz proje klasörünün içine kopyalıyoruz. GPIO ayarlarını yaptıktan sonra delay_init() fonksiyonunu kullanarak kütüphaneyi hazır hale getiriyoruz. delay fonksiyonumuz artık hazır hale gelmiş oluyor :). Kullandığınız mikrodenetleyiciye göre include kısmını değiştirmeyi unutmayın :). Video;
#include "stm32f10x.h" // Device header_Bool x=0;
intmain()
{
RCC->APB2ENR |= (1<<2); /* Enable GPIOA clock */
RCC->APB2ENR |= (1<<4); /* Enable GPIOC clock */
GPIOA->CRL &=0x00000000; // Set to Zero Port A
GPIOA->CRL |=0x00000008; // Set as a input PA0
GPIOC->CRH =0x00000022; // Set as a output PC8 & PC9while (1)
{
x=(GPIOA->IDR &0x0000001);
if(x) // PA0 ON (Led4) //
{
GPIOC->BSRR =1<<8; // LED ON PC8
}
else
{
GPIOC->BRR =1<<8; // LED OFF PC8
}
}
}
Delay fonksiyonunu kullanmak için şu ana kadar 2 yöntem uyguladım. 1.yöntem hızlıca oluşturduğum ve çok da sağlam olmayan bir yöntemdi. Video ve kodlar;
Arkadaşlar Merhaba, Bu video ile ARM derslerine başlamış bulunmaktayım.Elimden geldiğince haftada 1 ya da 2 haftada 1 video atmaya gayret göstereceğim.Ara sıra arduino ile ilgili sensör uygulama videoları da devam edecek. "Arduinotik" olan kanalımın ismi de bundan böyle "Gömülü Mühendis" olacak. STM32F4 kartları çok pahalı o yüzden caydırıcı olabiliyor. Benim kullandığım bu kadar ona nazaran daha ucuz ve ARM öğrenmenizi şevklendirecek bir fiyatta. Linki burda mutlaka inceleyin. https://www.robolinkmarket.com/stm32vl-discovery-gelistirme-karti.html ve son olarak abone olmayı unutmayın, nedeni de aşağıdaki paragraf :( YouTube açıkladığı son politikaya göre 1000 abone altı kanalların ve yıllık 4000 saat izlenmesi olmayan kanalların para kazanma özelliklerini kapatacağını açıkladı. Videoların devamlılığı ve bu konuda kanalıma destek olmak isterseniz lütfen kanalıma abone olmayı unutmayın. İyi seyirler...
Bu yazımda TCS3200 renk sensörünün kullanımından bahsedeceğim. Bu sensör üzerindeki fotodiyotlar aracılığıyla gördüğü rengi algılayıp çıkış veren bir sensör. TCS3200 renk sensörünü nasıl kullanacağımızdan bahsetmek gerekirse ; Üzerinde bulunan 4 inputu kullanmak istediğimiz renk filtresine göre lojik-1 ve lojik-0 konumuna getireceğiz. Daha sonra sensörün çıkışından aldığımız kare sinyalin kaç pulse olduğunu sayacağız. Bunu 3 renk için de uygulayıp, sensörün gördüğü cismin hangi renk olduğunu belirleyeceğiz.
Bir önceki yazımda C# üzerinden textBox kısmına girdiğimiz yazıyı LCD'de yazdırmıştık. Bu sefer bilgisayarın CPU sıcaklığını hem C# arayüzünde hem de LCD'de göstermemizi sağlayacak kodları paylaşmak istiyorum.