本帖最后由 数码小叶 于 2021-1-15 13:15 编辑
上一篇安装完了IAR,再下载几个ST的官方文档Getting started with STM8S and STM8AF microcontrollers,STM8S Series and STM8AF Series 8-bit microcontrollers Reference manual,STM8S001J3 Datasheet,STSW_STM8069_STM8S和STM8A标准外设固件库。对于编程来说,比较常用的就是参考手册和固件库帮助文档了
发现不同于STM32的是STM8S的工作电压比较宽泛啊,3V到5.5V都可以,集成了内部EEPROM,虽然管脚很少,但是常用的外设还是有的。ST-LINK上一直没用到过的SWIM引脚就是Single wire interface module ,作为STM8的调试编程接口。
打开自带的例程,很简单,就是实现LED的循环亮灭,
GPIO_Init(KEY_GPIO_PORT, (GPIO_Pin_TypeDef)KEY_GPIO_PINS, GPIO_MODE_IN_PU_NO_IT);
if(!GPIO_ReadInputPin(KEY_GPIO_PORT,KEY_GPIO_PINS))
{
while(1);
}
程序分三个部分,防死锁,管脚初始化,while 1死循环,开始没搞懂为啥要加一个防死锁,一上来就一个低电平导致死循环出不了,后来看到这么一段描述才明白 “第 8 脚又复用烧录功能。如果启用了其他功能(包括软件启用和选项字启用),第 8 脚的 debug 功能会自动禁止。其时就不能够下载和调试了,这就是我们说的死锁了 ” 所以就是为了防止程序中操作后使芯片无法下载。
没有看到关于时钟的配置,但是在Getting started with STM8S and STM8AF microcontrollers看到这么一段描述:“ After reset, the CPU starts with the internal RC (HSI clock signal) divided by 8, which means 2 MHz. ”
GPIO_Init()、GPIO_ReadInputPin、GPIO_WriteReverse()可以在stm8s_gpio.c中找到,此时,有了固件库的帮助文档,上手就很快了
再看下外部中断操作
EXTI_Init();
enableInterrupts();
void EXTI_Init(void)
{
GPIO_Init(EXTI_GPIO_PORT, EXTI_GPIO_PINS, GPIO_MODE_IN_PU_IT);
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
}
初始化+使能操作,初始化里选择管脚功能为外部中断,中断方式为下降沿触发,打开宏定义,可以看到触发方式有4种
对于管脚功能,比32更简化了,几个参数合成一个,但是使用起来更方便了,不用配置几个参数
而中断服务程序,在stm8s_it.c中都定义好了模板,这一点跟msp430的编程方式一样,
综合体验,给人的感受就是使用了库函数编程方式的51,很容易让使用过STM32的人上手。
|