搜索
楼主: radio2radio

[原创] 【源代码】STM32F103C8T6最小板搞定CMSIS-DAP和SWO功能

  [复制链接]

该用户从未签到

0

主题

5

帖子

0

蝴蝶豆

新手上路

最后登录
2018-7-8
发表于 2018-7-6 19:13:30 | 显示全部楼层
感谢分享!下来学习学习
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

621

帖子

152

蝴蝶豆

论坛元老

最后登录
2023-11-13
 楼主| 发表于 2018-7-17 17:20:34 | 显示全部楼层
shanji 发表于 2018-7-4 19:16
看来要换个mdk版本了

搞定没有?
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

56

帖子

8

蝴蝶豆

高级会员

最后登录
2020-11-21
发表于 2018-7-22 19:23:07 | 显示全部楼层

在  MDK 4.xx  里面编译通过了。
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.

缺少的头文件 在MDK 5.xx 下面目录里.
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include

缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

167

帖子

61

蝴蝶豆

金牌会员

最后登录
2021-1-30
发表于 2018-7-24 09:35:40 | 显示全部楼层
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

621

帖子

152

蝴蝶豆

论坛元老

最后登录
2023-11-13
 楼主| 发表于 2018-7-24 21:21:44 | 显示全部楼层
huangxuejia-292 发表于 2018-7-24 09:35
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...

这个简单,在main.c的最后面一段,我拷贝到这里:

  1. //-----Soft reset + Hard reset-------------------------------------------------
  2. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
  3. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR

  4. #define RST_CLOCK_CYCLE()                \
  5.   PIN_SWCLK_CLR();                       \
  6.   PIN_DELAY();                           \
  7.   PIN_SWCLK_SET();                       \
  8.   PIN_DELAY()

  9. #define RST_WRITE_BIT(bit)               \
  10.   PIN_SWDIO_OUT(bit);                    \
  11.   PIN_SWCLK_CLR();                       \
  12.   PIN_DELAY();                           \
  13.   PIN_SWCLK_SET();                       \
  14.   PIN_DELAY()

  15. #define RST_READ_BIT(bit)                \
  16.   PIN_SWCLK_CLR();                       \
  17.   PIN_DELAY();                           \
  18.   bit = PIN_SWDIO_IN();                  \
  19.   PIN_SWCLK_SET();                       \
  20.   PIN_DELAY()

  21. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)

  22. uint8_t RST_Transfer(uint32_t request, uint32_t data)
  23. {
  24.   uint32_t ack;                                                                 \
  25.   uint32_t bit;                                                                 \
  26.   uint32_t val;                                                                 \
  27.   uint32_t parity;                                                              \
  28.   uint32_t n;                                                                   \
  29.   \
  30.   /* Packet Request */                                                          \
  31.   parity = 0U;                                                                  \
  32.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \
  33.   bit = request >> 0;                                                           \
  34.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \
  35.   parity += bit;                                                                \
  36.   bit = request >> 1;                                                           \
  37.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \
  38.   parity += bit;                                                                \
  39.   bit = request >> 2;                                                           \
  40.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \
  41.   parity += bit;                                                                \
  42.   bit = request >> 3;                                                           \
  43.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
  44.   parity += bit;                                                                \
  45.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \
  46.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \
  47.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \
  48.   \
  49.   /* Turnaround */                                                              \
  50.   PIN_SWDIO_OUT_DISABLE();                                                      \
  51.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
  52.     RST_CLOCK_CYCLE();                                                          \
  53.   }                                                                             \
  54.   \
  55.   /* Acknowledge response */                                                    \
  56.   RST_READ_BIT(bit);                                                            \
  57.   ack  = bit << 0;                                                              \
  58.   RST_READ_BIT(bit);                                                            \
  59.   ack |= bit << 1;                                                              \
  60.   RST_READ_BIT(bit);                                                            \
  61.   ack |= bit << 2;                                                              \
  62.   \
  63.   /* Data transfer */                                                           \
  64.   /* Turnaround */                                                              \
  65.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
  66.     RST_CLOCK_CYCLE();                                                          \
  67.   }                                                                             \
  68.   PIN_SWDIO_OUT_ENABLE();                                                       \
  69.   /* Write data */                                                              \
  70.   val = data;                                                                   \
  71.   parity = 0U;                                                                  \
  72.   for (n = 32U; n; n--) {                                                       \
  73.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \
  74.     parity += val;                                                              \
  75.     val >>= 1;                                                                  \
  76.   }                                                                             \
  77.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \
  78.   PIN_SWDIO_OUT_ENABLE();                                                       \
  79.   PIN_SWDIO_OUT(1U);                                                            \
  80.   return ((uint8_t)ack);                                                        \
  81. }

  82. void vResetTarget(uint8_t bit)
  83. {
  84.   uint32_t i;
  85.   //soft-reset for Cortex-M
  86.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address
  87.   for (i=0; i<100; i++);
  88.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
  89.   for (i=0; i<100; i++);
  90.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat
  91.   for (i=0; i<100; i++);
  92.   RST_Transfer(0x00000CDD, 0x05FA0007);
  93.   
  94.   if (bit & 1)  PIN_nRESET_HIGH();
  95.   else          PIN_nRESET_LOW();
  96. }

复制代码


您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。

CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。

USB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。

回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

167

帖子

61

蝴蝶豆

金牌会员

最后登录
2021-1-30
发表于 2018-7-25 15:00:55 | 显示全部楼层
radio2radio 发表于 2018-7-24 21:21
这个简单,在main.c的最后面一段,我拷贝到这里:

改好了,调试能复位。
MSD(U盘拖放)无法复位。。。
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

621

帖子

152

蝴蝶豆

论坛元老

最后登录
2023-11-13
 楼主| 发表于 2018-7-25 18:59:43 | 显示全部楼层
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑
huangxuejia-292 发表于 2018-7-25 15:00
改好了,调试能复位。
MSD(U盘拖放)无法复位。。。

你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

9

帖子

0

蝴蝶豆

新手上路

最后登录
2018-7-26
发表于 2018-7-26 10:38:40 | 显示全部楼层
很受益啊,希望楼主继续分享有价值的资料
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

486

帖子

63

蝴蝶豆

金牌会员

最后登录
2021-5-12
发表于 2018-7-27 10:01:49 | 显示全部楼层

还没有,不去折腾了
回复 支持 反对

使用道具 举报

该用户从未签到

20

主题

56

帖子

8

蝴蝶豆

高级会员

最后登录
2020-11-21
发表于 2018-7-27 17:01:25 | 显示全部楼层
radio2radio 发表于 2018-7-24 21:21
这个简单,在main.c的最后面一段,我拷贝到这里:

看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-29 18:11 , Processed in 0.172044 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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