STM8L10x環境搭建

準備

STM8的編譯環境有兩種,一個是IAR,一個是ST官方提供的STVD+COSMIC.
由於IAR需要破解,我選擇了使用官方提供的環境STVD。

  • STVD:IDE,可以從ST官網下載
  • COSMIC: 編譯器,可以從它的官網下載。http://www.cosmic-software.com/download.php
  • stm8_stdperiph_lib:標準庫,這個也可以從ST官網下載,不同型號的芯片對應不同的庫。有時候官網登不上不知道什麼原因。

之前在stm32上用慣了標準庫,所以,這次使用stm8也使用標準庫編程,這樣不需要太關注底層的寄存器。但是,標準庫並不太標準,有些坑,需要注意,後面會說到。

建立目錄

  • cos: 放置編譯出來的相關文件
  • lib: 放置標準庫。把標準庫中的inc和src拷貝過來
  • src: 放置自己的業務程序文件,包括main.c。

另外,需要把標準庫中的stm8l10x_conf.h、stm8l10x_it.c、stm8l10x_it.h拷貝到src目錄下

配置

STVD安裝完成後,打開。跟其他keil等IDE沒有太多區別,都是大同小異的。

  • 創建WorkSpace,Project
  • 選擇編譯器,就是剛纔安裝好的COSMIC。
  • 選擇IC型號
  • 添加文件

編譯

編譯,然後保存關閉。這樣會在cos目錄下自動生成main.c和stm8_interrupt_vector.c。刪除該main.c文件,因爲在src下我們已經創建了。再次打開工程,會報個警告,找不到main.c,忽略。
直接編譯應該是會報錯的,重複定義NonHandledInterrupt。
註釋掉stm8_interrupt_vector.c中的該函數

#if 0
@far @interrupt void NonHandledInterrupt (void)
{
	/* in order to detect unexpected events during development, 
	   it is recommended to set a breakpoint on the following instruction
	*/
	return;
}
#endif

另外,包含頭文件stm8l10x_it.h

#include "stm8l10x_it.h"

這樣下來,基本的環境就搭建完成了。環境搭建可以參考:
https://wenku.baidu.com/view/87aade66b84ae45c3b358cc3.html
https://blog.csdn.net/sy_lixiang/article/details/8461829

內存

由於是八位單片機,很多東西跟32位的不太一樣,需要注意的。
第一個需要注意的是內存。看完這兩篇文章就清楚了:
https://blog.csdn.net/sygdp21/article/details/17420393
https://blog.csdn.net/dongganxiao_maidou/article/details/73775533

GPIO

stm8l101的標準庫中gpio的操作中有bug

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, BitAction GPIO_BitVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_STATE_VALUE(GPIO_BitVal));
 
  if (GPIO_BitVal != RESET)
  {
    //SetBit(GPIOx->ODR, GPIO_Pin);//BUG語句,GPIO_Pin是按位來定義的,卻被SetBit以字節來操作。
    GPIOx->ODR |= GPIO_Pin;    
  }
  else
  {
    //ClrBit(GPIOx->ODR, GPIO_Pin);//BUG語句,GPIO_Pin是按位來定義的,卻被SetBit以字節來操作。
    GPIOx->ODR &= (uint8_t)(~GPIO_Pin);    
  }
}

具體可以參考
https://blog.csdn.net/feilusia/article/details/53209672
最後,感謝這些博主的無私奉獻。希望自己也可以在這兒盡一份微薄之力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章