Electoday 4.0

ช่วยดูโค้ด STVD / Cosmic .. STM8 ให้ทีครับ @_@

Online TaoTao

  • ***
  • 163
    • View Profile
Code: [Select]
#include "stm8s103k.h"

int main(void)
{
CLK_CKDIVR = 0; // prescaler system clock = 1
while( (CLK_ICKR & 2)==0 ); // wait HSI ready

TIM1_ARR = 1600 - 1; // auto reload 100 usec
TIM1_CR1 = 1; // enable timer_1

while (1);
}
รันใน STVD + Cosmic
Register TIM1_CNTR ตัวนับของ TIM1
มันไม่ยอมเบรก ที่ค่า auto_reload (ค่า TIM1_ARR) ครับ
คือ มันนับจนสุด 0xFFFF ตลอดเลย

แต่พอ เอาโคด้นี้ ไปรันใน EWARM for STM8 ทำงานปกติดี คือ reload ค่า TIM1_ARR=1599 ทุกครั้ง
เป็นเพราะอะไรหรือครับ ต้องแก้ไขตรงไหน ให้มัน autoreload ที่ TIM1_ARR ครับ




อีกโค้ดนะครับ โคดเดียวกัน ทำเป็น Function ก่อน main()
Code: [Select]
/* ----------- ใน main.c ------------ */

#include "stm8s103k.h"

void system_config(){
                CLK_CKDIVR = 0; // prescaler system clock = 1
while( (CLK_ICKR & 2)==0 ); // wait HSI ready

TIM1_ARR = 1600 - 1; // auto reload 100 usec
TIM1_CR1 = 1; // enable timer_1
}


int main(void)
{
system_config();
while (1);
}
รันใน STVD + Cosmic..
อันนี้หนักเลย Debug ไม่ผ่าน
มันขึ้นว่า missing prototype ที่บรรทัด..  system_config();

แต่ เอาไปวางใน EWARM for STM8  กลับทำงานได้ปกติ

เป็นเพราะอะไรหรือครับ
ต้องแก้ไข หรือผิดพลาดตรงไหนหรือครับ งมมา2 วัน
อันนี้  @_@!   หนักเลย

ที่อยากใช้ STVD + Cosmic เพราะว่า
Cosmic_4.4.4 ล่าสุด มันไม่ Limit Code Size ครับ
แต่ IAR_EWARM for STM8 จำกัดที่ 8kB

Link download ครับ

http://www.cosmicsoftware.com/download.php
https://www.iar.com/iar-embedded-workbench/#!?architecture=STM8&device=STM8S103K3

ขอบคุณ สำหรับคำตอบล่วงหน้าครับ
 :P

ลองดูตามนี้ครับ

TIM1_ARR   = 1600 - 1;      // auto reload 100 usec

ให้เปลี่ยนเป็น

TIM1_ARRH = 0x06;       //  Reload counter = 1599
TIM1_ARRL = 0x3F;


ส่วน Missing Prototype ให้ประกาศ Function ก่อนครับ

void system_config();

Code: [Select]
#include "stm8s103k.h"

void system_config();

void system_config(){
                CLK_CKDIVR = 0; // prescaler system clock = 1
while( (CLK_ICKR & 2)==0 ); // wait HSI ready

TIM1_ARRH = 0x06;       //  Reload counter = 1599
                TIM1_ARRL = 0x3F;
TIM1_CR1 = 1; // enable timer_1
}


int main(void)
{
system_config();
while (1);
}

Online TaoTao

  • ***
  • 163
    • View Profile
ขอบคุณมากมายครับ
ประกาศฟังชัน บนหัวมัน เครื่องผมลองแล้ว ก็ไม่หายครับ

/* -------------------------------------------- */
และ ตอนนี้ รู้สาเหตุ แว้วว ครับ

ผมได้ email ถามไปยัง Cosmic_C.fr
พร้อมๆ กับ ถามไปในฟอรัม

https://my.st.com/public/STe2ecommunities/mcu/Lists/stm81/AllItems.aspx

ทาง Cosmic_C ตอบเมล์ ไวมาก หลังจากเมล์ไปเพียง 15 นาทีเอง
ขอบคุณ คุณ HUA Thanh-Liem แห่ง Cosmic.fr มากครับ

เค้าบอกว่า มันเกิดจาก -pp ของการตั้งค่าใน STVD-Complier ครับ
เพราะว่า -pp มันต้องการ Prototype ในการโคดดิ้ง

STVD ค่า Default Complier ของการติดตั้งครั้งแรก ไม่ใช่ Default  :-\
เพิ่งมาจับ ใครจะไปรู้

ทางออกอีกทาง เค้าบอกว่า

ตอนสร้าง..       Prototype ( ){ /* code */ }
ให้เปลี่ยนเป็น..  Prototype ( void ) { /* code */ } ซะ

ผมลองทำตามดู ก็สามารถ Build ได้แว้วครับ

เผื่อบางคน มือใหม่ ติดปัญหาอย่างผมนะครับ

ขอบคุณสำหรับคำตอบทุกคนนะครับ
^_^!