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
最后,感谢这些博主的无私奉献。希望自己也可以在这儿尽一份微薄之力。

你可能感兴趣的:(STM32)