我有一些StdPeriph库用于编程stm32的经验。但是现在我尝试了STM32Cube HAL和STM32CubeMX代码生成器。我生成了一个具有以下选项的项目:
我将生成的代码导入Eclipse环境。我做了一个二进制,然后用“st写.”像往常一样。我的测试程序成功地在循环中写信给USART1 "Hello“--这不是问题。但是,当我试图闪现另一段代码时,它用“未知芯片id”失败了。如果我手动连接NRST到GND,st-flash给出:
...Flash: 0 bytes (0 KiB) in pages of 2048 bytes全部产出:
2015-06-14T16:07:29 INFO src/stlink-common.c: Loading device parameters....
2015-06-14T16:07:29 INFO src/stlink-common.c: Device connected is: F1 High-density device, id 0x10036414
2015-06-14T16:07:29 INFO src/stlink-common.c: SRAM size: 0x10000 bytes (64 KiB), Flash: 0 bytes (0 KiB) in pages of 2048 bytes我试着使用Windows实用程序,但是它不能连接到这个MCU来改变选项字节(连接到另一个stm32设备很好)。我试图闪过USART1,但失败了。
当然,我闪现的源代码不包含任何启用读/写保护。我尝试了另外两个MCU,但是这个错误被复制了。
我怎样才能解除MCU和闪存任何东西?
发布于 2015-07-27 22:31:33
如果您正确地设置了JTAG/SWD引脚的引脚分配(例如SYS_JTDI,SYS_JTDO TRACESWO等)在STM32CubeMX的pinout选项卡上,生成的代码不会禁用JTAG/SWD。
发布于 2015-06-16 19:25:20
我找到了一个根本原因!
这是一个HAL初始化函数,由STM32CubeMX生成:
void HAL_MspInit(void)
{
/* USER CODE BEGIN MspInit 0 */
/* USER CODE END MspInit 0 */
__HAL_RCC_AFIO_CLK_ENABLE();
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
/* System interrupt init*/
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/**DISABLE: JTAG-DP Disabled and SW-DP Disabled
*/
__HAL_AFIO_REMAP_SWJ_DISABLE();
/* USER CODE BEGIN MspInit 1 */
/* USER CODE END MspInit 1 */
}我没注意到这句简单的台词!
/**DISABLE: JTAG-DP Disabled and SW-DP Disabled
*/
__HAL_AFIO_REMAP_SWJ_DISABLE();这个宏完全禁用了社署和JTAG编程,请看stm321xx_hal_gpio_ex.h。
#define __HAL_AFIO_REMAP_SWJ_DISABLE() MODIFY_REG(AFIO->MAPR, AFIO_MAPR_SWJ_CFG, AFIO_MAPR_SWJ_CFG_DISABLE) 我没有在CubeMX中找到任何禁用/启用SWD/JTAG的复选框,所以这是--代码生成器的唯一行为!在使用STM32CubeMX时要注意这一点!
发布于 2017-12-04 22:22:38
它(埋在)下,STM32CubeMX...set到串行电线或其他。
https://stackoverflow.com/questions/30829838
复制相似问题