Senin, 10 Februari 2014

Membuat project baru pada Keil uVision untuk pemrograman board STM32F4 Discovery (New Project in uVision STM32F4 Discovery)

Hai hai...kembali lagi bersama saya dengan tampilan blog yang baru dengan nama CircuitDrilling. Apa filosofi dari Circuit Drilling? Bodo amat apalah arti sebuah nama, walau sebenarnya nama juga penting buat marketing. Ok lah, setelah sekian lama vakum dari dunia blogger, sekarang saya kembali lagi exsist dengan tema blog yang lebih specific, yaitu Electronics, Drilling, dan pengalaman perjalanan saya mengarungi kehidupan per-mbolangan.

Postingan terakhir saya sebelum ini adalah tentang pemrograman ARM Cortex M4 dengan menggunakan WinArm, tapi karena alasa kepratisan, maka saya mulai berpindah ke software yang lebih user friendly, yaitu KEIL uVision.


Tidak perlu panjang lebar tentang software ini, yang jelas lebih mudah dari pada WinARM. Tapi dengan konsekwnsi kita harus beli versi berlisensi nya. Tapi untuk Trial, ada juga versi eval nya, kalau mau download silakan di www.keil.com , atau untuk versi gratisan yang tidak resmi alias crack2an, silakan saja cari 4shared atau tempat lain, tang jelas banyak yang makai IDE ini kok.

Setelah diinstal dan dibaca readme nya, tampilan uVision adalah sebagai berikut.



Bingung kan, kok kosong melompong. hahaha. Software ini berbeda dengan software yang biasa saya gunakan untuk pemrograman microcontroller AVR ATMega family, yaitu CodeVision AVR, yang dimana CV AVR mempunyai code wizard yang akan menggenerate coding secara otomatis. Di uVision, tidak disediakan fasilitas seperti itu. Kenapa? tak taulah awak, tapi yang jelas menurut awak, yang namanya codewizaerd itu adalah fasilitas PEMBODOHAN (hahaha), walau memang bisa dibilang sangat praktis.

Ada yang lupa saudara, sebelum membuat project baru, sangat saya sarankan untuk mendownload file file update dari UVision yang bisa di download disini , file tersebut berisi library library  yang  kita perlukan selain library asli dari software uVision nya.

Langsung saja, untuk membuat project baru, kita klik tab Project  > New uVision Project , maka akan keluar pop up yang meminta kita untuk menentukan tempat kita menaruh file project kita. Di laptop awak, akan saya coba untuk menyimpanya di drive D:/arm_dev , tapi kalo ente terserah. Beri nama yang mudah diingat sesui dengan tema project yang kita buat, project kita akan otomatis disimapn dengan ekstensi .uvproj. Kemudian klik Save. kemuadian akan muncul tampilan seperti ini :


Pop up tersebut digunakan untuk memilih tipe dari processor apa yang kita pakai. Berhubung saya memakai board STM32F4 Discovery, maka saya akan memilih STMicroelectronics >> STM32F407VG. Klik ok, dan kemudian akan muncul pertanyaan 'Copy 'startup_stm32f4xx.s' to Project Folder and Add File to Project?'? Yes, saya sangat ingin sekali menambahkan file penting tersebut. File tersebut digunakan sebagai parameter parameter dari chip yang kita pakai.

Akhirnya kita masuk ke project baru, tapi kok tetep kosong. Hahaha. Di uVision, kita benar benar membuat pemrograman dari nol, saran saya, untuk membuat pemrograman STM32F4 lebih cepat, siap siap dengan senjata Copy-Paste. Di window tersebut kita sudah melihat Target1, yaitu project sasaran eksekusi dari compiler maupun linker dan lain lain. Yang perlu kita lakukan sekarang adalah, kita perlu menambahkan sedikit setingan pada Target Options. Klik tap Projects >> Option for Target 'nama target' ( atau icon yang ada tongkat penyihir-nya), maka akan keluar popup seperti ini:


Di tab tersebut, ada yang perlu kita sesuaikan, antara lain:  
1. XTal (MHz) = 8.00 MHz (sesuai dengan xtal dari board, sebenarnya bisa di optimalkan sampe 160an MHz, tipa kita bahas nanti)
2. Centang Use MicroLIB
3. Centang IRAM2

Di tab Output, jangan lupa dicentang Create Hex File

Di tab C/C++, perlu banyak setingan. Bisa dilihat di bawah ini:
1. Define = USE_STDPERIPH_DRIVER , STM32F4XX
2. Optimation : Level 3
3. Centang One ELF Section per Function
4. Include path, lebih mudah untuk ditunjukkan dengan gambar. hahaha:


PERHATIAN : Di awal tadi, saya anggap ente ente sudah mendownload file library dari website ST, atau bila belum download silakan klik disini. Bila sudah, extrak file tersebut di sebuah folder yang tidak terlalu "dalam". maksudnya, kalau bisa di extrak di folder di drive D ata C, jangan dimasukin ke folder folder lagi. Semua folder yang terdapat pada include path tab, diambil dari hasil extrak file yang di download. 

Di tab ASM, selalu saya isi Define = USE_STDPERIPH_DRIVER , STM32F4XX

Di tab Debug, lihat saja gambar ini. ST-Link Debugger dipilih karena saya menggunakan debugger bawaan dari board STM32f4 Discovery.



Di tab Utilities , silakan saja liat gambar. hehehe


Oh iya ada 1 lagi yang lupa. Berdasarkan pengalaman, lebih baik copy stm32f4xx_syscfg.c dan system_stm32f4xx.c  ke folder dari project kita. File tersebut bisa dicopy file kita download sebelumnya (di folder src).

Ok, sekarang mari kita buat project sederhana di sini. Kita bisa saja buka example yang ada, tapi ngga greget kalo g bikin sendiri kan. Di sini kita buat aplikasi sederhana yang melibatkan I/O dari board STM32F4 Discovery. Pergi ke tab FILE >> New .Biar g lama, silakan copy saja file dibawah ini dan paste ke file baru tersebut.

#include // library setting I/O
#include //library pengaturan clock
#include

volatile char btns;

void Delay(__IO uint32_t nCount)
{
  while(nCount--)
  {
/*Fungsi delay ini tidak presisi karena menggunakan metode TEKIRO alias teknik kiro kiro*/
uint32_t i;
for (i=0;i<42000 i="">
{}
i=0;
  }
}

void BTN_Init(void) 
{
/*user push button terhubung dengan PA.0*/
  RCC->AHB1ENR  |= ((1UL <<  0) );              /* Enable GPIOA clock         */

  GPIOA->MODER    &= ~((3UL <<; 2*0)  );         /* PA.0 is input              */
  GPIOA->OSPEEDR  &= ~((3UL << 2*0)  );         /* PA.0 is 50MHz Fast Speed   */
  GPIOA->OSPEEDR  |=  ((2UL << 2*0)  ); 
  GPIOA->PUPDR    &= ~((3UL << 2*0)  );         /* PA.0 is no Pull up         */
}
uint32_t BTN_Get(void) 
{
 return (GPIOA->IDR & (1UL << 0)); //cek nilai dari register IDR PA.0
}
void LED_Init(void)
{
/*LED terhubung ke PD.12, PD.13, PD.14, PD.15 */
RCC->AHB1ENR  |= ((1UL << 3) );         /* Enable GPIO port D clock                */
GPIOD->MODER    &= ~((3UL << 2*12) |
                       (3UL << 2*13) |
                       (3UL << 2*14) |
                       (3UL << 2*15)  );   /* PD.12..15 is output               */
  GPIOD->MODER    |=  ((1UL << 2*12) |
                       (1UL << 2*13) | 
                       (1UL << 2*14) | 
                       (1UL << 2*15)  ); 
  GPIOD->OTYPER   &= ~((1UL <<   12) |
                       (1UL <<   13) |
                       (1UL <<   14) |
                       (1UL <<   15)  );   /* PD.12..15 is output Push-Pull     */
GPIOD->OSPEEDR  &= ~((3UL << 2*12) |
                       (3UL << 2*13) |
                       (3UL << 2*14) |
                       (3UL << 2*15)  );   /* PD.12..15 is 50MHz Fast Speed     */
  GPIOD->OSPEEDR  |=  ((2UL << 2*12) |
                       (2UL << 2*13) | 
                       (2UL << 2*14) | 
                       (2UL << 2*15)  ); 
GPIOD->PUPDR    &= ~((3UL << 2*12) |
                       (3UL << 2*13) |
                       (3UL << 2*14) |
                       (3UL << 2*15)  );   /* PD.12..15 is Pull up              */
  GPIOD->PUPDR    |=  ((1UL << 2*12) |
                       (1UL << 2*13) | 
                       (1UL << 2*14) | 
                       (1UL << 2*15)  );  
}

int main(void)
{
/*
Fungis ini merupakan contoh sederhana dari STM32F4 Discovery. Jika user button ditekan, maka LED3, LED4, LED5, LED6 akan mati,
dan jika dilepas, LED3, LED4, LED5, LED6 akan menyala.
*/
  // Systemclock auf 168MHz (stm32F4Discovery mit 8MHz Quarz)
  SystemInit();
//INIT BUTTON AND LEDS
BTN_Init();
LED_Init();
while(1)
    {
   
btns = BTN_Get();
if(btns ==(1UL << 0))
{
btns=0;
GPIOD->BSRRH = 1UL << 12; GPIOD->BSRRH = 1UL << 13; GPIOD->BSRRH = 1UL << 14;GPIOD->BSRRH = 1UL << 15;
Delay(1000);
}
else
{
GPIOD->BSRRL = 1UL << 12; GPIOD<<BSRRL = 1UL << 13; GPIOD->BSRRL = 1UL << 14;GPIOD->BSRRL = 1UL << 15;
}
    }
}

Kemudian simpan dengan nama main.c di folder project kita. Kita juga perlu menambahkan beberapa file source ke dalam target atau project kita. Untuk memudahkan dalam proses pengenalan file, lebih baik kita pisahkan file ke beberapa group. Cara membuat adalah dengan cara klik kanan Target1 >> Add Group. Kita beri nama group baru tersebut dengan nama source dan source2. Kemudian tambahkan file ke dalam group dengan cara klik kanan nama group, misal source2 >> Add files to group 'source2'. Hasil dari penambahan file ke project adalah seperti gambar di bawah ini.



Setelah semua project di compile dan di built dengan tanpa menghasilkan error, maka project kita sipa untuk di Load ke board STM32F4 kita.

Cukup kayaknya tulisan ini. Mungkin ada beberapa orang yang baca tulisan ini berpikir "RIbet amat ya". Kalau misal ada yang punya cara lebih bagus, tolong di share di mari ya, kan sama sama belajarnya :D




3 komentar:

Abdi mengatakan...

makasih byk ilmunya mas..

Unknown mengatakan...

maksih mas, dari tadi nyari library dan cara masukinnya. ternyata ketemunya di sini . makasih banayk mas ..

SIPP

jadugunawan mengatakan...

kalo ada vidionya..