搜索
查看: 1820|回复: 4

[原创] 【STM8-SO8-DISCO】+ (1)基本定时器四中点灯

[复制链接]

该用户从未签到

35

主题

1447

帖子

22

蝴蝶豆

金牌会员

最后登录
2021-2-24
发表于 2019-1-22 11:10:55 | 显示全部楼层 |阅读模式
本帖最后由 damiaa 于 2019-1-23 15:42 编辑

【STM8-SO8-DISCO】+ 基本定时器四中点灯  
小8芯的STM8S001 只有TIM1,2,4。 TIM4为基本定时器。只有些基本功能。用它最好理解了。
先看一下原理图:



QQ图片20190122164711.png
IO口1 PA1/PD6
IO口5 PA3/PB5
IO口6 PB4
IO口7 PC3/PC4/PC5 上面四个IO口可以用
IO口8 SWID不能占用
IO口7用到按键了,IO口5用到LED1了。
可以根据情况使用。

下面开始


1,安装IAR开发环境。
2,申请一个免费的lisensee。
3,建立stm8s001test目录,在它下面建立:project,user,libraries三个目录。
QQ图片20190122110421.png

4,拷贝一个STM8的工程模板到project目录。
5,拷贝main.c stm8s_conf.h stm8s_it.h stm8s_it.c到user目录。
6,拷贝库文件到libraries目录。
7,加入文件到工程。(如果以前有删除后加入): QQ图片20190122110700.png
8,配置头文件路径。
QQ图片20190122142628.png
9,main.c 加入
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm8s.h"
  3. #define LED_GPIO_PORT  (GPIOA)
  4. #define LED_GPIO_PINS  (GPIO_PIN_3)
  5. #define TIM4_PERIOD       124
  6. void Delay (uint16_t nCount);
  7. static void TIM4_Config(void);
  8. void LED1_Toggle();
  9. void main(void){
  10.   /* Initialize I/Os in Output Mode */
  11.   GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  12. /* TIM4 configuration -----------------------------------------*/
  13.   TIM4_Config();
  14.   while (1)
  15.   {
  16.   }
  17. }
  18. void Delay(uint16_t nCount){
  19.   while (nCount != 0){   nCount--; }
  20. }
  21. static void TIM4_Config(void)
  22. {
  23.   /* TIM4 configuration:
  24.    - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
  25.    clock used is 16 MHz / 128 = 125 000 Hz
  26.   - With 125 000 Hz we can generate time base:
  27.       max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms
  28.       min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
  29.   - In this example we need to generate a time base equal to 1 ms
  30.    so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */
  31.   /* Time base configuration */
  32.   TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
  33.   /* Clear TIM4 update flag */
  34.   TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  35.   /* Enable update interrupt */
  36.   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  37.   /* enable interrupts */
  38.   enableInterrupts();
  39.   /* Enable TIM4 */
  40.   TIM4_Cmd(ENABLE);
  41. }
  42. void LED1_Toggle(){
  43.    GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
  44. }
复制代码
stm8s_it.c加入
  1. extern void LED1_Toggle();
  2. ...
  3. ...
  4. INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
  5. {
  6.   /* In order to detect unexpected events during development,
  7.      it is recommended to set a breakpoint on the following instruction.
  8.   */
  9.   static uint16_t tims=0;
  10.   tims++;
  11.   if(tims >1000)
  12.   {
  13.     tims =0;
  14.     LED1_Toggle();
  15.   }
  16. }
复制代码

10,编译调试:
微信图片_20190122102947.jpg
微信图片_20190122102956.jpg
11,文件:
stm8s001test.zip (2.91 MB, 下载次数: 7)
回复

使用道具 举报

该用户从未签到

8

主题

712

帖子

38

蝴蝶豆

论坛元老

最后登录
2021-8-25
发表于 2019-1-22 14:58:52 | 显示全部楼层
下次申请到开发板了来试试。
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

1447

帖子

22

蝴蝶豆

金牌会员

最后登录
2021-2-24
 楼主| 发表于 2019-1-22 15:38:15 | 显示全部楼层
qiangtech 发表于 2019-1-22 14:58
下次申请到开发板了来试试。

好 希望能申请到。
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

5

帖子

0

蝴蝶豆

初级会员

最后登录
2022-3-9
发表于 2020-12-10 17:10:44 | 显示全部楼层
楼主你好,我使用的STM8L001J3,按照您的例程,测试不能进入定时器中断呢,请指点,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

1447

帖子

22

蝴蝶豆

金牌会员

最后登录
2021-2-24
 楼主| 发表于 2021-1-12 09:27:14 | 显示全部楼层
yuandm1 发表于 2020-12-10 17:10
楼主你好,我使用的STM8L001J3,按照您的例程,测试不能进入定时器中断呢,请指点,谢谢 ...

我这个是STM8S001 。STM8L001J3是不是要换一下几个文件?没试过。留意要换的 stm8s_conf.h stm8s_it.h stm8s_it.c 还有库。或者自己找一下。不记得了。你自己看看吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-26 16:48 , Processed in 0.173880 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表