你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
shanji 发表于 2018-7-4 19:16 看来要换个mdk版本了
radio2radio 发表于 2018-7-17 17:20 搞定没有?
huangxuejia-292 发表于 2018-7-24 09:35 楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。 还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
//-----Soft reset + Hard reset------------------------------------------------- #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR #define RST_CLOCK_CYCLE() \ PIN_SWCLK_CLR(); \ PIN_DELAY(); \ PIN_SWCLK_SET(); \ PIN_DELAY() #define RST_WRITE_BIT(bit) \ PIN_SWDIO_OUT(bit); \ PIN_SWCLK_CLR(); \ PIN_DELAY(); \ PIN_SWCLK_SET(); \ PIN_DELAY() #define RST_READ_BIT(bit) \ PIN_SWCLK_CLR(); \ PIN_DELAY(); \ bit = PIN_SWDIO_IN(); \ PIN_SWCLK_SET(); \ PIN_DELAY() #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay) uint8_t RST_Transfer(uint32_t request, uint32_t data) { uint32_t ack; \ uint32_t bit; \ uint32_t val; \ uint32_t parity; \ uint32_t n; \ \ /* Packet Request */ \ parity = 0U; \ RST_WRITE_BIT(1U); /* Start Bit */ \ bit = request >> 0; \ RST_WRITE_BIT(bit); /* APnDP Bit */ \ parity += bit; \ bit = request >> 1; \ RST_WRITE_BIT(bit); /* RnW Bit */ \ parity += bit; \ bit = request >> 2; \ RST_WRITE_BIT(bit); /* A2 Bit */ \ parity += bit; \ bit = request >> 3; \ RST_WRITE_BIT(bit); /* A3 Bit */ \ parity += bit; \ RST_WRITE_BIT(parity); /* Parity Bit */ \ RST_WRITE_BIT(0U); /* Stop Bit */ \ RST_WRITE_BIT(1U); /* Park Bit */ \ \ /* Turnaround */ \ PIN_SWDIO_OUT_DISABLE(); \ for (n = DAP_Data.swd_conf.turnaround; n; n--) { \ RST_CLOCK_CYCLE(); \ } \ \ /* Acknowledge response */ \ RST_READ_BIT(bit); \ ack = bit << 0; \ RST_READ_BIT(bit); \ ack |= bit << 1; \ RST_READ_BIT(bit); \ ack |= bit << 2; \ \ /* Data transfer */ \ /* Turnaround */ \ for (n = DAP_Data.swd_conf.turnaround; n; n--) { \ RST_CLOCK_CYCLE(); \ } \ PIN_SWDIO_OUT_ENABLE(); \ /* Write data */ \ val = data; \ parity = 0U; \ for (n = 32U; n; n--) { \ RST_WRITE_BIT(val); /* Write WDATA[0:31] */ \ parity += val; \ val >>= 1; \ } \ RST_WRITE_BIT(parity); /* Write Parity Bit */ \ PIN_SWDIO_OUT_ENABLE(); \ PIN_SWDIO_OUT(1U); \ return ((uint8_t)ack); \ } void vResetTarget(uint8_t bit) { uint32_t i; //soft-reset for Cortex-M RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address for (i=0; i<100; i++); RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data for (i=0; i<100; i++); RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat for (i=0; i<100; i++); RST_Transfer(0x00000CDD, 0x05FA0007); if (bit & 1) PIN_nRESET_HIGH(); else PIN_nRESET_LOW(); } 复制代码 您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。 CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。 USB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。 也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。
radio2radio 发表于 2018-7-24 21:21 这个简单,在main.c的最后面一段,我拷贝到这里:
huangxuejia-292 发表于 2018-7-25 15:00 改好了,调试能复位。 MSD(U盘拖放)无法复位。。。
g2004-148848 发表于 2018-8-7 00:03 请问楼主是用哪个版本编译的?
【MCU实战经验】+STM32F103的uCOSII详细移植
STM32中BOOT的作用
STM32如何分配原理图IO
STM32的I2S外设
STM32电路知识学习
基于STM32F1的CAN通信之DMA
STM32怎么选型
简单分析STM32和51的区别
简单聊聊STM32的SPI外设
stm32单片机编程入门基础知识
也不一定要换,单独升级CMSIS,如图:
搞定没有?
在 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库文件 也复制过去. 具体在哪里就不清楚了.
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
这个简单,在main.c的最后面一段,我拷贝到这里:
改好了,调试能复位。
MSD(U盘拖放)无法复位。。。
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
还没有,不去折腾了
看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0