经不住诱惑,今天开始玩STM8!麻烦过来人进来讲讲心得

2019-12-26 18:53发布

1、买的STM8 value line discovery板刚到手,从最简单的STM8S003开始吧。
2、下载了STVD/COSMIC。COSMIC_32K坛里有和谐好的,不过要先下载原版安装。
3、争取今晚把LED点亮。
4、其实我很看好STM8L152,之后要测试一下耗电和ADC性能。
5、纯业余玩的,还没想好弄点啥……
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
76条回答
mowin
1楼-- · 2019-12-30 06:28
非常感谢众网友回帖。
现已经用millwood0的代码成功闪烁stm8s vl discovery的LED。唯一改动了main.c第三行,原#include <iostm8.h>改为#include <iostm8s.h>,否则出现PD_ODR为定义错误。经查证PD_ODR定义在iostm8s.h中。
第一步已经成功踏出。接下来研究一下如何编写该MCU的中断服务程序。弄清楚这点之后,应该就没有什么障碍了。
mowin
2楼-- · 2019-12-30 10:57
点灯代码备份一下 led_blinky.zip (36.93 KB, 下载次数: 21) 2012-9-9 08:32 上传 点击文件名下载附件 ,来源于millwood0提供的模板。我稍微整理了一下,供各位参考。
millwood0
3楼-- · 2019-12-30 16:51
interrupt is easy.

for example, here is a timer interrupt:

//tim2.h
  1. //tim definitions
  2. //good for tim2/3/5
  3. //tim prescaler definitions
  4. #define TIM_PS_1x                        0x00                        //prescaler = 1:1
  5. #define TIM_PS_2x                        0x01                        //prescaler = 1:2
  6. #define TIM_PS_4x                        0x02                        //prescaler = 1:4
  7. #define TIM_PS_8x                        0x03                        //prescaler = 1:8
  8. #define TIM_PS_16x                        0x04                        //prescaler = 1:16
  9. #define TIM_PS_32x                        0x05                        //prescaler = 1:32
  10. #define TIM_PS_64x                        0x06                        //prescaler = 1:64
  11. #define TIM_PS_128x                        0x07                        //prescaler = 1:128
  12. #define TIM_PS_256x                        0x08                        //prescaler = 1:256
  13. #define TIM_PS_512x                        0x09                        //prescaler = 1:512
  14. #define TIM_PS_1024x                0x0a                        //prescaler = 1:1024
  15. #define TIM_PS_2048x                0x0b                        //prescaler = 1:2048
  16. #define TIM_PS_4096x                0x0c                        //prescaler = 1:4096
  17. #define TIM_PS_8192x                0x0d                        //prescaler = 1:8192
  18. #define TIM_PS_16384x                0x0e                        //prescaler = 1:16384
  19. #define TIM_PS_32768x                0x0f                        //prescaler = 1:32768

  20. //tim2 handler
  21. //executed by tim2_ovr_isr
  22. //to be defined by usr

  23. void tim2_init(unsigned char tm_prescaler, unsigned short period);

  24. void tim2_act(void (*func_ptr)(void));
复制代码tim2.c


  1. #include <iostm8.h>
  2. #include "tim2.h"

  3. //user code needs to assigned _tmr0_func to a subroutine or the mcu will reboot when the isr trips
  4. void (*_tim2_func) (void);                                        //tim2_function ptr

  5. //tim3_ovr_handler to be set by users
  6. //tim3 isr handler
  7. #pragma vector = TIM2_OVR_UIF_vector                //tim3 overflow interrupt
  8. __interrupt void tim2_ovr_isr(void) {
  9.         TIM2_SR1_UIF=0;                                                        //clear the flag
  10.         //tim2_handler();                                                //execute tim3 handler
  11.         _tim2_func();                                                        //execute function
  12. }

  13. void tim2_init(unsigned char tm_prescaler, unsigned short period) {
  14.         TIM2_CR1_CEN = 0;                                                //turn off the timer
  15.         TIM2_CNTRL = 0;                                                        //preload the counter's low byte
  16.         TIM2_PSCR = tm_prescaler;                                 /* Configure TIM2 prescaler */
  17.         TIM2_ARRH = period >> 8;                                 /* Configure TIM3 auto reload -> period. ms byte first*/
  18.         TIM2_ARRL = period & 0x00ff;                         /* Configure TIM3 auto reload -> period. */
  19.         TIM2_CNTRH = 0;                                                        //preload the counter high byte
  20.         TIM2_CR1_ARPE = 1;                                                //turn on auto reload
  21.         TIM2_CR1_CEN = 1;                                                //turn on the timer
  22.         TIM2_IER_UIE = 1;                                                //enable the tim3 updateinterrupt
  23. }

  24. void tim2_act(void (*func_ptr)(void)) {
  25.         _tim2_func=func_ptr;
  26. }
复制代码tim2_init() sets the prescaler and desired delay for each interrupt. tim2_act() installs a user handler.

millwood0
4楼-- · 2019-12-30 21:35
 精彩回答 2  元偷偷看……
millwood0
5楼-- · 2019-12-30 23:40
you can repeat the code for tim1,3,4...

or other peripherals.
trent5145
6楼-- · 2019-12-31 00:21
我用IAR,刚开始用库吧,几天就熟悉了,和其他单片机差不多

一周热门 更多>