Otonom Forklift
Araca el ile müdahale edebilmek için gerekli bilgisayar ara yüzü.
Tezi indirmek için tıklayınız; insansız hareket edebilen otomatik forklift
STM32F0 USART MikroC örnek kodları
#define button GPIOf_ODR.B5
unsigned okunan, yaz;
void main()
{
GPIO_Digital_output(&GPIOc_ODR, _GPIO_PINMASK_1| _GPIO_PINMASK_2) ;
GPIO_Digital_Input(&GPIOF_IDR, _GPIO_PINMASK_5);
GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_0);
UART2_Init(9600); // initialize UART2 module
Delay_ms(100);
UART_Set_Active(UART2_Read, UART2_Write, UART2_Data_Ready,UART2_Tx_Idle ); // Uart modüllerini aktive ediyor...
UART2_Write_Text("Bismillah"); //ilk olarak gönderilen yazı
delay_ms(100);
UART2_Write(13); //başlangıç biti
UART2_Write(10); // bitiş biti
While (1)
{
if(GPIOA_IDR.B0 == 1) {
UART2_Write_text("Ahmet");
UART2_Write(13);
UART2_Write(10);
delay_ms(100);
}
delay_ms(55);
if(GPIOF_IDR.B5 == 1) {
UART2_Write_text("yasin");
UART2_Write(13);
UART2_Write(10);
delay_ms(100);
}
}
}
Okumaya devam et STM32F0 USART MikroC örnek kodları STM32F0 İnterrup MikroC kodları
Aşağıda yazmış olduğumuz programda kesme birimi kullanmaktadır C2 pinine bağlı ledimizi 400ms de bir C8 pinine bağlı ledi 100ms de bir yakıp söndürecektir.Bu işlemi belirli aralıklarla ana programı durdurarak yapacaktır.Kesmeye uğradığı zaman ana programda çalışan 100ms lik yanıp sönen led duracak C8 pinine bağlı olan led 5 sefer yanıp sönecektir
#define button GPIOf_IDR.B5
int a;
void Timer2_interrupt() iv IVT_INT_TIM2 {
TIM2_SR.UIF = 0; // Toggle PORTC led on
if ( button == 1 ){
a=0;
do {
GPIOC_ODR.B2 = 1 ;
delay_ms(400);
GPIOC_ODR.B2 = 0 ;
delay_ms(400);
a++;
}while(a!=5) ;
}
}
void main() {
GPIO_Digital_Output(&GPIOC_BASE, _GPIO_PINMASK_8 | _GPIO_PINMASK_2 );
GPIO_Digital_Input (&GPIOf_BASE, _GPIO_PINMASK_5) ;
GPIO_Digital_Input (&GPIOa_BASE, _GPIO_PINMASK_0) ;
//GPIOC_ODR.B8 = 0;
RCC_APB1ENR.TIM2EN = 1; // Enable clock gating for timer module 2
TIM2_CR1.CEN = 0; // Disable timer
TIM2_PSC = 10; // set timer prescaler
TIM2_ARR = 10;
NVIC_IntEnable(IVT_INT_TIM2); // Enable timer interrupt
TIM2_DIER.UIE = 1; // Update interrupt enable
TIM2_CR1.CEN = 1; // Enable timer
while (1) {
GPIOC_ODR.B8 = 1;
delay_ms(100);
GPIOC_ODR.B8 = 0;
delay_ms(100) ;
}
}
STM32F0 Donanımsal PWM MikroC kodları
Aşağıda yazmış olduğumuz program; işlemcinin 1. ve 4. kanalına bağlı motorları 100 ms lik aralıklarla hızlandıran bir programdır.
Kullandığımız STM32F0 PWM kanalları 16 bir çözünürlüktedir. Bu da demek oluyor ki çözünürlüğümüz 65535 maksimum değer alır. Oldukça iyi.
int b=0 ;
void pwm(int motor1 , int motor2, int bekle) {
PWM_TIM1_Set_Duty(motor1, _PWM_NON_INVERTED, _PWM_CHANNEL1);
PWM_TIM1_Set_Duty(motor2, _PWM_NON_INVERTED, _PWM_CHANNEL4);
Vdelay_ms(bekle) ;
}
void main() {
PWM_TIM1_Init(10000);
PWM_TIM1_Start(_PWM_CHANNEL1, _GPIO_MODULE_TIM1_CH1_PA8);
PWM_TIM1_Start(_PWM_CHANNEL4, _GPIO_MODULE_TIM1_CH4_PA11);
do{
pwm(b,b,100);
b=b+10;
if(b=4000){
b=0;
}
}while(1);
}
}
ARM STM32F0 MikroC Karaşimşek Örnek Uygulaması
Uygulama fonksiyonları kullanarak basit bir şekilde karaşimşek led uygulamsını yapmktayız. Aşağıda yapılan uygulamayı sizlerde “for” kullanarak yapabilirsiniz.
void led (int led){
GPIO_Digital_Output(&GPIOC_ODR, _GPIO_PINMASK_1 | _GPIO_PINMASK_2 | _GPIO_PINMASK_3 | _GPIO_PINMASK_4 | _GPIO_PINMASK_5 | _GPIO_PINMASK_6 | _GPIO_PINMASK_7 ) ;
if (led==0){
GPIOc_ODR.B1 = 0 ;
GPIOc_ODR.B2 = 0 ;
GPIOc_ODR.B3 = 0 ;
GPIOc_ODR.B4 = 0 ;
GPIOc_ODR.B5 = 0 ;
GPIOc_ODR.B6 = 0 ;
GPIOc_ODR.B7 = 0 ;
}
if (led==1) {
GPIOc_ODR.B1 = 1 ;
}
if (led==2) {
GPIOc_ODR.B2 = 1 ;
}
if (led==3) {
GPIOc_ODR.B3 = 1 ;
}
if (led==4) {
GPIOc_ODR.B4 = 1 ;
}
if (led==5) {
GPIOc_ODR.B5 = 1 ;
}
if (led==6) {
GPIOc_ODR.B6 = 1 ;
}
if (led==7) {
GPIOc_ODR.B7 = 1 ;
}
}
int a;
void main() {
a=0;
while (1) {
do{
led (a);
delay_ms(100);
led (0);
a++ ;
} while (a!=6);
do{
led (a);
delay_ms(100);
led (0);
a-- ;
}while (a!=1) ;
}
}
ARM STM32F0 İf – Else Kontrol Yapısı
unsigned int a ;
void main ()
{
GPIO_Digital_Input (&GPIOA_IDR, _GPIO_PINMASK_0) ;
GPIO_Digital_Output(&GPIOB_ODR, _GPIO_PINMASK_5) ;
GPIO_Digital_Output(&GPIOC_ODR, _GPIO_PINMASK_8 | _GPIO_PINMASK_1 | _GPIO_PINMASK_14 | _GPIO_PINMASK_9) ;
GPIO_Digital_Output(&GPIOB_ODR, _GPIO_PINMASK_12) ;
do
{
GPIOC_ODR.B14 = 1 ;
Delay_ms (1) ;
GPIOC_ODR.B14 = 0 ;
Delay_ms (10) ;
GPIOC_ODR.B1 = 1 ;
a = 1 ;
if (Button(GPIOA_IDR, 0, 1, 1))
{
GPIOC_ODR.B1 = 0 ;
GPIOC_ODR.B14 = 1 ;
Delay_ms(200);
do
{
GPIOC_ODR.B14 = 1 ;
if (GPIOA_IDR.b0 == 1) {a=0;}
delay_ms (110) ;
} while (a) ;
}
} while (1) ;
}
Stm32F0 MikroC Ders 2
Örnek 7 segmentli Display Uygulama Kodları
unsigned int i ;
void bir()
{
GPIOB_ODR.B2 = 1 ;
GPIOF_ODR.B4 = 1 ;
}
void yok()
{
GPIOb_ODR.B10 = 0 ;
GPIOb_ODR.B2 = 0 ;
GPIOb_ODR.B12 = 0 ;
GPIOb_ODR.B11 = 0 ;
GPIOa_ODR.B5 = 0 ;
GPIOa_ODR.B4 = 0 ;
GPIOF_ODR.B4 = 0 ;
GPIOa_ODR.B5 = 0 ;
}
void iki()
{
GPIOB_ODR.B10 = 1 ;
GPIOB_ODR.B2 = 1 ;
GPIOb_ODR.B12 = 1 ;
GPIOa_ODR.B5 = 1 ;
GPIOA_ODR.B4 = 1 ;
}
void uc ()
{
GPIOB_ODR.B10 = 1 ;
GPIOB_ODR.B2 = 1 ;
GPIOB_ODR.B12 = 1 ;
GPIOF_ODR.B4 = 1 ;
GPIOA_ODR.B4 = 1 ;
}
void dort()
{
GPIOb_ODR.B11 = 1 ;
GPIOb_ODR.B12 = 1 ;
GPIOb_ODR.B2 = 1 ;
GPIOf_ODR.B4 = 1 ;
}
void bes()
{
GPIOb_ODR.B10 = 1 ;
GPIOb_ODR.B11 = 1 ;
GPIOb_ODR.B12 = 1 ;
GPIOF_ODR.B4 = 1 ;
GPIOa_ODR.B4 = 1 ;
}
void alti ()
{
GPIOb_ODR.B10 = 1 ;
GPIOb_ODR.B11= 1 ;
GPIOb_ODR.B12= 1 ;
GPIOa_odr.b5 = 1 ;
GPIOa_ODR.B4 = 1 ;
GPIOf_ODR.B4 = 1 ;
}
void yedi()
{
GPIOB_ODR.B10 = 1 ;
GPIOB_ODR.B2 = 1 ;
GPIOF_ODR.B4 = 1 ;
}
void sekiz()
{
GPIOb_ODR.B10 = 1 ;
GPIOb_ODR.B11 = 1 ;
GPIOb_ODR.B12 = 1 ;
GPIOb_ODR.B2 = 1 ;
GPIOa_ODR.B5 = 1 ;
GPIOa_ODR.B4 = 1 ;
GPIOf_ODR.B4 = 1 ;
}
void dokuz()
{
GPIOb_ODR.B11 = 1 ;
GPIOb_ODR.B10 = 1 ;
GPIOb_ODR.B2 = 1 ;
GPIOb_ODR.B12 = 1 ;
GPIOf_ODR.B4 = 1 ;
GPIOA_ODR.B4 = 1 ;
}
void sifir()
{
GPIOb_ODR.B10 = 1 ;
GPIOb_ODR.B11 = 1 ;
GPIOb_ODR.B2 = 1 ;
GPIOa_ODR.B4 = 1 ;
GPIOa_ODR.B5 = 1 ;
GPIOf_ODR.B4 = 1 ;
}
void a()
{
GPIOb_ODR.B10 = 1 ;
GPIOb_ODR.B11 = 1 ;
GPIOb_ODR.B2 = 1 ;
GPIOb_ODR.B12 = 1 ;
GPIOf_ODR.B4 = 1 ;
GPIOa_ODR.B5 = 1 ;
}
void main() {
GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_0);
GPIO_Digital_Output(&GPIOA_ODR, _GPIO_PINMASK_3 | _GPIO_PINMASK_4 | _GPIO_PINMASK_5 );
GPIO_Digital_Output(&GPIOC_ODR, _GPIO_PINMASK_14 | _GPIO_PINMASK_9 | _GPIO_PINMASK_8 );
GPIO_Digital_Output(&GPIOB_ODR, _GPIO_PINMASK_2 | _GPIO_PINMASK_10 | _GPIO_PINMASK_11 | _GPIO_PINMASK_12 | _GPIO_PINMASK_12 );
GPIO_Digital_output(&GPIOF_ODR, _GPIO_PINMASK_4) ;
i = 0;
do{
if (GPIOA_IDR.B0 == 1)
{
i=i+2;
}
delay_ms(250);
yok();
if ( i == 1)
{
bir();
}
else if ( i == 2)
{
iki();
}
else if ( i == 3)
{
uc();
}
else if ( i == 4)
{
dort();
}
else if ( i == 5)
{
bes();
}
else if ( i == 6)
{
alti();
}
else if ( i == 7)
{
yedi();
}
else if ( i == 8)
{
sekiz();
}
else if ( i == 9)
{
dokuz();
}
else
{
i = 0 ;
sifir () ;
}
} while (1);
}
ARM ders 1
STM32F051r8 mikro denetleyicinin mikroC tarafından programlaması üzerine yapılan bir video çalışması
bu videoda yeni bir projenin oluşturulmasından ve stm32f0 discovery kartının üzerinde bulunan kullanıcı ledlerinden birini yakarak ilk uygulamamızı yapıyoruz.

Ayarlarımızı yukarıda resimde görüldüğü gibi değiştiriyoruz. Eğer değişiklik yapmazsak bekleme beklemelerde ve zaman değerlerinde sorunlar yaşanır.
Okumaya devam et ARM ders 1TuSey Mini Sumo Robotu
