数码之家

 找回密码
 立即注册
搜索
查看: 1245|回复: 9

[STM] 分享一个STM8S207基于embOS的程序和自己写的串口调试助手

[复制链接]
发表于 2022-9-12 18:51:09 | 显示全部楼层 |阅读模式
附件的embOS用IAR打开,里面有4个任务,一个按键任务扫描3个按键,另有3个LED任务,每个LED以不同的频率闪烁。


  1. #include "main.h"
  2. #include "RTOS.h"

  3. OS_STACKPTR int Stack_KEY[128];         /* 按键任务堆栈   */
  4. OS_TASK TCB_KEY;                        /* 按键任务控制块 */
  5. #define Priority_KEY        100                        /* 按键任务优先级 */

  6. OS_STACKPTR int Stack_LED_1[128];         /* LED1任务堆栈   */
  7. OS_TASK TCB_LED_1;                        /* LED1任务控制块 */
  8. #define Priority_LED_1        95                        /* LED1任务优先级 */


  9. OS_STACKPTR int Stack_LED_2[128];         /* LED2任务堆栈   */
  10. OS_TASK TCB_LED_2;                        /* LED2任务控制块 */
  11. #define Priority_LED_2        90                         /* LED1任务优先级 */


  12. OS_STACKPTR int Stack_LED_3[128];         /* LED3任务堆栈   */
  13. OS_TASK TCB_LED_3;                        /* LED3任务控制块 */
  14. #define Priority_LED_3        80                         /* LED1任务优先级 */


  15. static void Task_KEY(void)
  16. {
  17.     while (1)
  18.     {
  19. // #if DEBUG == 1
  20. //                 printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
  21. // #endif // DEBUG == 1

  22.                 key_scan(KEY_L);
  23.                 key_scan(KEY_M);
  24.                 key_scan(KEY_R);


  25.     switch (KEY_STATUS[KEY_L]) //左键
  26.     {
  27.     case KeyStatus_Short:
  28.     {
  29. #if DEBUG == 1
  30.         printf("[%s][%s][%d]左键短按\r\n", __FILE__, __func__, __LINE__);
  31. #endif // DEBUG == 1
  32.         // led_turn(LED_1);
  33.         break;
  34.     }
  35.     case KeyStatus_Long:
  36.     {
  37. #if DEBUG == 1
  38.         printf("[%s][%s][%d]左键长按\r\n", __FILE__, __func__, __LINE__);
  39. #endif // DEBUG == 1
  40.         // led_turn(LED_1);
  41.         break;
  42.     }
  43.     default:
  44.     {
  45.         break;
  46.     }
  47.     }
  48.     KEY_STATUS[KEY_L] = KeyStatus_None;

  49.     switch (KEY_STATUS[KEY_M]) //中键
  50.     {
  51.     case KeyStatus_Short:
  52.     {
  53. #if DEBUG == 1
  54.         printf("[%s][%s][%d]中键短按\r\n", __FILE__, __func__, __LINE__);
  55. #endif // DEBUG == 1

  56.         // led_turn(LED_2);

  57.         break;
  58.     }
  59.     case KeyStatus_Long:
  60.     {
  61. #if DEBUG == 1
  62.         printf("[%s][%s][%d]中键长按\r\n", __FILE__, __func__, __LINE__);
  63. #endif // DEBUG == 1
  64.         // led_turn(LED_2);
  65.         break;
  66.     }
  67.     default:
  68.     {
  69.         break;
  70.     }
  71.     }
  72.     KEY_STATUS[KEY_M] = KeyStatus_None;

  73.     switch (KEY_STATUS[KEY_R]) //右键
  74.     {
  75.     case KeyStatus_Short:
  76.     {
  77. #if DEBUG == 1
  78.         printf("[%s][%s][%d]右键短按\r\n", __FILE__, __func__, __LINE__);
  79. #endif // DEBUG == 1
  80.         // led_turn(LED_3);
  81.         break;
  82.     }
  83.     case KeyStatus_Long:
  84.     {
  85. #if DEBUG == 1
  86.         printf("[%s][%s][%d]右键长按\r\n", __FILE__, __func__, __LINE__);
  87. #endif // DEBUG == 1
  88.         // led_turn(LED_3);
  89.         break;
  90.     }
  91.     default:
  92.     {
  93.         break;
  94.     }
  95.     }
  96.     KEY_STATUS[KEY_R] = KeyStatus_None;


  97.         OS_Delay(10);
  98.     }
  99. }

  100. static void Task_LED_1(void)
  101. {
  102.     while (1)
  103.     {
  104. // #if DEBUG == 1
  105. //                 printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
  106. // #endif // DEBUG == 1
  107.         led_turn(LED_1);
  108.         OS_Delay(100);
  109.     }
  110. }

  111. static void Task_LED_2(void)
  112. {
  113.     while (1)
  114.     {
  115. // #if DEBUG == 1
  116. //                 printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
  117. // #endif // DEBUG == 1
  118.         led_turn(LED_2);
  119.         OS_Delay(200);
  120.     }
  121. }

  122. static void Task_LED_3(void)
  123. {
  124.     while (1)
  125.     {
  126. // #if DEBUG == 1
  127. //                 printf("[%s][%s][%u]\r\n", __FILE__, __func__, __LINE__);
  128. // #endif // DEBUG == 1
  129.         led_turn(LED_3);
  130.         OS_Delay(300);
  131.     }
  132. }


  133. #define UartBaudRate        460800

  134. /*********************************************************************
  135. *
  136. *       main
  137. *
  138. *********************************************************************/

  139. int main(void)
  140. {
  141.     OS_IncDI();                                                                                                      /* 关闭所有中断                          */
  142.     OS_InitKern();                                                                                                   /* 初始化OS                                        */
  143.         disableInterrupts();                                                                                         /* 关闭总中断               */
  144.         clk_init(CLK_SOURCE_HSE);                                                                                 /* 时钟初始化               */
  145.         tim3_init( TIM3_PRESCALER_1, OS_TIMER_RELOAD);                                         /* 初始化定时器3,定时1ms   */
  146.         uart1_init(UartBaudRate);                                                                                /* UART1初始化              */
  147.         enableInterrupts();                                                                                                /* 打开总中断                                */
  148.     key_init(KEY_L);
  149.     key_init(KEY_M);
  150.     key_init(KEY_R);
  151.     led_init(LED_1);                                                                                                 /* 初始化 LED1                             */
  152.     led_init(LED_2);                                                                                                 /* 初始化 LED2                             */
  153.     led_init(LED_3);                                                                                                 /* 初始化 LED3                             */
  154.     led_on(LED_1);                                                                                                   /* 点亮 LED1                             */
  155.     led_on(LED_2);                                                                                                   /* 点亮 LED2                             */
  156.     led_on(LED_3);                                                                                                   /* 点亮 LED3                             */

  157. #if DEBUG == 1
  158.         printf("\r\n\r\n\r\n");
  159.         printf("[%s][%s][%u]STM8S207RB 主频:%luHz\r\n", __FILE__, __func__, __LINE__,  CLK_GetClockFreq());
  160.         printf("[%s][%s][%u]STM8S207RB Uart1波特率:%lubps\r\n", __FILE__, __func__, __LINE__, UartBaudRate);
  161.         printf("[%s][%s][%u]STM8S207RB 编译日期:%s\r\n", __FILE__, __func__, __LINE__, __DATE__);
  162.         printf("[%s][%s][%u]STM8S207RB 编译时间:%s\r\n", __FILE__, __func__, __LINE__, __TIME__);
  163.         printf("\r\n\r\n\r\n");
  164. #endif // DEBUG == 1

  165.     /* You need to create at least one task before calling OS_Start() */


  166.     OS_CREATETASK(&TCB_KEY,
  167.                   "Task_KEY",
  168.                   Task_KEY,
  169.                   Priority_KEY,
  170.                   Stack_KEY);


  171.     OS_CREATETASK(&TCB_LED_1,
  172.                   "Task_LED_1",
  173.                   Task_LED_1,
  174.                   Priority_LED_1,
  175.                   Stack_LED_1);

  176.     OS_CREATETASK(&TCB_LED_2,
  177.                   "Task_LED_2",
  178.                   Task_LED_2,
  179.                   Priority_LED_2,
  180.                   Stack_LED_2);

  181.     OS_CREATETASK(&TCB_LED_3,
  182.                   "Task_LED_3",
  183.                   Task_LED_3,
  184.                   Priority_LED_3,
  185.                   Stack_LED_3);

  186.     OS_Start(); /* Start multitasking            */
  187.     return 0;
  188. }

  189. #ifdef USE_FULL_ASSERT

  190. /**
  191. * [url=home.php?mod=space&uid=650075]@brief[/url]  Reports the name of the source file and the source line number
  192. *   where the assert_param error has occurred.
  193. * @param file: pointer to the source file name
  194. * @param line: assert_param error line source number
  195. * @retval : None
  196. */
  197. void assert_failed(u8 *file, u32 line)
  198. {
  199.     /* User can add his own implementation to report the file name and line number,
  200.        ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  201.     /* Infinite loop */
  202.     while (1)
  203.     {
  204.     }
  205. }
  206. #endif
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +20 收起 理由
ww5223017240 + 20 謝謝分享

查看全部打赏

发表于 2022-9-13 00:05:45 | 显示全部楼层
感谢分享! 这几天怎么每天扣5M币,本身就少天天扣,什么也没点啊,你们也扣吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-13 08:57:35 | 显示全部楼层
你有403个M币,我有-225个M币。
回复 支持 反对

使用道具 举报

发表于 2022-9-13 09:11:09 | 显示全部楼层
MCU还是用国产的,不要老美又断供,STC32位8051对高校是持续免费送MCU,STC32G12K128/STC8H8K64U核心学习板,USB下载,USB仿真
回复 支持 反对

使用道具 举报

发表于 2022-9-13 11:11:27 | 显示全部楼层
1980a 发表于 2022-9-13 00:05
感谢分享! 这几天怎么每天扣5M币,本身就少天天扣,什么也没点啊,你们也扣吗 ...

只要你登录就-5啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-13 12:37:45 | 显示全部楼层
M币有什么用呀,我都是负几百了
回复 支持 反对

使用道具 举报

发表于 2022-9-13 15:57:16 | 显示全部楼层
kkstun 发表于 2022-9-13 11:11
只要你登录就-5啊

对登录就-5,以前也不扣啊!对于我们什么也不会的,币子是一点一点赞的
回复 支持 反对

使用道具 举报

发表于 2022-9-13 15:59:50 | 显示全部楼层
595953427@qq 发表于 2022-9-13 12:37
M币有什么用呀,我都是负几百了

下载别人分享的东西,下载需要M币,没币子不行啊
回复 支持 反对

使用道具 举报

发表于 2022-9-13 21:43:12 | 显示全部楼层
kkstun 发表于 2022-9-13 11:11
只要你登录就-5啊

不是吧,登录还扣分?
回复 支持 反对

使用道具 举报

发表于 2022-12-21 22:00:43 | 显示全部楼层
可以啊 系统级别的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-6 04:43 , Processed in 0.312001 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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