今天的主角是STM8-SO8-DISCO,这块板子上共有3片8Pin的STM8:STM8S001J3M3,STM8L001J3M3,STM8L050J3M3,可用于评估测试STM8S和STM8L系列8个引脚芯片的功能,同时板载了 ST-LINK/V2 可以用于调试和下载使用。开发板默认连接的是STM8S001J3M3,你如果想评估测试另外2个芯片,可以2种方法:通过修改几个电阻的桥接 ,或者直接断开载有芯片的SO8模块和开发板的连接然后插到DIP8插座上。可能是8脚的STM8足够便宜,所以ST这次来了个大放送,让我们一次体验3款不同的芯片。
看下开发板的配置:
- STM8S001J3M3 microcontroller featuring 8 Kbytes of Flash memory, 1 Kbyte of RAM and 128 bytes of Data EEPROM in an SO8 package
- STM8L001J3M3 microcontroller featuring 8 Kbytes of Flash memory including up to 2 Kbytes of Data EEPROM and 1.5 Kbytes of RAM in an SO8 package
- STM8L050J3M3 microcontroller featuring 8 Kbytes of Flash memory, 1 Kbyte of RAM and 256 bytes of Data EEPROM in an SO8 package
- 1 user LED
- 1 user push-button
- Individual and breakable STM8 SO8 to DIL8 module
- DIL8 socket to ease programming of the STM8 MCU
- On-board ST-LINK/V2 debugger/programmer
- Comprehensive free software libraries and examples
- Support of a wide choice of Integrated Development Environments (IDEs) including Cosmic, IAR™, Raisonance, iSYSTEM and STMicroelectronics
芯片外设配置:
STM8S001J3 8 位微控制器提供 8 k 字节闪存程序存储器,以及集成式真数据 EEPROM。STM8S001J3 器件性能强,稳健性高,且降低了系统成本。支持高达 100,000 个写入/擦除周期的真正数据 EEPROM 确保了器件的性能和稳健性,先进的内核和外设采用最先进的技术制造,拥有 16 MHz 时钟频率、强大的 I/O、采用独立时钟源的独立看门狗以及时钟安全系统。由于实现与内部时钟振荡器、看门狗和掉电复位功能的高度集成,降低了系统成本。拥有三个标准接口:UART、SPI、I2C,10 位模数转换器和 2 个 16 位定时器、1 个 8 位定时器组合。工作温度范围:-40°C 至 +125°C。小小的身体有大大的本事,8引脚的STM8能做很多事情。
系统时钟:
为了更快速的启动,复位后系统时钟控制器设置主时钟源为内部16MHZ的HSI RC 时钟 的8分频(2MHZ),这主要是利用了HSI较短的稳定时间,进行8分频是为了在不稳定的VDD的情况下也能正常的启动,正常启动后,用户可以根据需要,编程切换主时钟源。
使用芯片的CCO功能,通过设置将CPU时钟16分频后通过PC4引脚输出:
CLK_CCOConfig(CLK_OUTPUT_CPUDIV16);
CLK_CCOCmd(ENABLE);
可以看到2MHZ 的时钟进行16分频后的波形如下,内部时钟非常的准确,这是因为每个芯片出厂前都被ST校准过HSI,系统复位后校准的值会被自动装载到内部的校准寄存器里面。
STM8S 的开发非常方便快速,官方提供了好用的标准库,各个外设代码非常的独立,外设模块之间没有乱七八糟的耦合(此处并没有影射STM32的HAL不好)。比如我们想要点亮下面的LED灯就非常简单。
void main(void)
{
GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);
while (1);
}
然后再加入个延迟和IO反正就可以看到LED闪烁了:
#include "stm8s.h"
void Delay(uint32_t nCount)
{
while (nCount != 0)
{
nCount--;
}
}
void main(void)
{
GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);
while (1)
{
GPIO_WriteReverse(GPIOA,GPIO_PIN_3);
Delay(0xFFFF);
}
}
对于像我这种第一使用STM8的新手来说,能这么快实现一个小功能是非常具有激励性的,它让我有继续探索下去的热情。
|