2020年3月

stm32f4 usb 调试,软件调试可以使用 Wireshark 里面的 usb 组件,或者 usb Monitor 。 但是这些软件调试都有一个问题,必须在枚举分配地址之后,才能由软件调试收集到信息。如果在枚举的时候出错,就无法确认具体的错误。 碰到这种情况,只能选用有 usb 协议分析功能的逻辑分析仪。我使用了 kingst 的 la5016,就可以找到具体在枚举哪一步出错。 对于枚举的分析,可以参考文章: http://www.baiheee.com/Documents/090507/090507153901.htm http://www.waveshare.net/study/article-664-1.html

Wireshark 中过滤地址可以用 usb.addr=="3.8.0" 这种形式。

在 cube 中配置时可选 sdram1 和 sdram2,这两个对应的是内部映射的存储区域 sdram1 和 sdram2。如果选择 sdram2,那么访问 0xD000 0000 - 0xDFFF FFFF 之间的地址时,芯片就会使用 sdram2 的控制器。 sdram2 的控制器还可以设置相应的 cs 引脚,用来决定这个控制器控制的是 具体哪个物理引脚 sdne 对应的 sdram。

如果相应 sdram 能够执行程序,还需要和 nand 进行交换,使用 swp_fmc,交换到 external ram 区域,这个区域支持 xip 功能。

使用 eclipse 的安装市场安装 git 和 gitflow。

然后右键 项目工程,选择 team,选择 init gitflow,需要等待一会,就自动创建好了。 然后选择 gitflow 中的 start feature 来创建一个新的 feature。 修改好文件后,选择 git 中的 commit 来提交本地更新。 当本地功能完成以后,可以选择 gitflow 中的 publish feature 来发布到远程。

如果想要从远程获得本地没有的 feature ,选择 git flow 中的 track feature。

当 feature 功能没有问题后,可以 finish feature 来终结这个 finish,并自动合并到 develop 中。 但是不会自动推送到远程。需要用 git 中的 push 来更新到远程。而且远程上的 feature 分支也会保留。

使用 imap 功能,需要 hotmail 允许 imap,并且要放行 imap。 具体设置是在 需要提供 imap 的 hotmail 邮箱,点击账户头像,选择安全设置,然后查看最近的登录记录,对里面的 imap 登录记录进行放行即可。

stm32f429使用 stm32cube 自动生成 eth 代码的时候,运行出现 FLASH_FLAG_PGSERR 错误。 见过调试发现,MX_ETH_Init 中没有对指针进行赋值,就直接写入了,所以出错。 进行下面的修改。

/* USER CODE BEGIN 0 */
static uint8_t macAddr[6];
void MX_ETH_VarInit(void)
{
    heth.Init.MACAddr = macAddr;
}
/* USER CODE END 0 */
/* USER CODE BEGIN Prototypes */
void MX_ETH_VarInit(void);
/* USER CODE END Prototypes */
  /* USER CODE BEGIN SysInit */
  MX_ETH_VarInit();
  /* USER CODE END SysInit */

stm32cubeide 是基于 eclipse 开发的软件,所以修改和 eclipse 类似,只要在 window --> perference --> keys 里面把 content assist 这个功能绑定到自己喜欢的按键即可。默认是 ctrl + space,我比较喜欢替换为 alt + /, 因为 alt + / 这个是 word completion,感觉比较鸡肋,所以直接替换掉。

在 main.c 中增加

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */

/* USER CODE BEGIN 0 */
#ifdef __GNUC__
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart5, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
    return ch;
}
/* USER CODE END 0 */

...main...
  /* USER CODE BEGIN 2 */
  printf("abc\n");
  printf("a = %d\n", 100);
  printf("b = %f\n", 1.23);
  /* USER CODE END 2 */

注意后面需要加 "\n",不然有可能不显示出来,或者可以用 fflush(stdout)。 浮点数需要开启 浮点数支持,project --> properties --> c/c++ build --> setting --> tools setting --> mcu setting --> use float xxx 参考: https://www.cnblogs.com/tianxxl/p/11970459.html http://ibotx.com/?p=198

当使用 secureCRT 进行调试的时候,"\n" 下一行不会从最左边开始显示。如果想要 "\n" 实现 "\r\n" 的效果,只要设置 会话选项 --> 终端 --> 仿真 --> 模式 --> 新行模式。 参考:http://www.mamicode.com/info-detail-204918.html

如果想要每个外设的配置文件放在单独的文件里面,可以在 mx 的 project manager --> code generator --> generate periheral initialization as apair of “.c/.h” files per periheral;