你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32最小系统板的SystemWorkbench的说明

[复制链接]
丿灬幸灬 发布时间:2018-11-5 10:20
本帖最后由 丿灬幸灬 于 2018-11-5 10:24 编辑

3377461491222118980.png
描述
我意识到我只是将emacs作为IDE使用的人群中的一员。我决定用SystemWorkbench一段时间。有很多事情需要处理,我的笔记可能会对你有所帮助。

细节
基于对之前的评论,我决定使用SystemWorkbench。



使用CDC USB串行口的提示

当您将USB CDC串行总线添加到您的项目中,您不会得到关于下一步做什么的帮助。CDC_Transmit_FS调用非常明显。给它一个消息和一个长度,它就会发送它。很好。

不过是通过名为CDC_Receive_FS的回调函数接收。你不会把它叫做。框架为您调用它。

这是我的版本:
  1. static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)

  2. {

  3.   /* USER CODE BEGIN 6 */
  4. uint32_t len=*Len;
  5. if (hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED)
  6. {
  7.    return USBD_FAIL;
  8. }

  9. if (((Buf == NULL) || (Len == NULL)) || (*Len <= 0))
  10. {
  11.    return USBD_FAIL;
  12. }

  13. /* Get data */
  14. uint8_t result = USBD_OK;
  15.     do
  16.     {
  17.         result = USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  18.     }
  19.     while(result != USBD_OK);

  20.     do
  21.     {
  22.        result = USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  23.     }
  24.     while(result != USBD_OK);

  25. // add data to FIFO
  26.     while (len--)
  27.        if (FIFO_INCR(RX_FIFO.head)==RX_FIFO.tail)
  28.              return USBD_FAIL;  // overrun
  29.        else
  30.         {
  31.         RX_FIFO.data[RX_FIFO.head]=*Buf++;
  32.        RX_FIFO.head=FIFO_INCR(RX_FIFO.head);
  33.        }
  34.    return (USBD_OK);

  35.   /* USER CODE END 6 */

  36. }
复制代码

这是其中一个头文件:

  1. #define  FIFO_SIZE 32  // must be 2^N

  2. #define FIFO_INCR(x) (((x)+1)&((FIFO_SIZE)-1))

  3. /* Structure of FIFO*/

  4. typedef struct FIFO

  5. {
  6. uint32_t head;
  7. uint32_t tail;
  8.     uint8_t data[FIFO_SIZE];
  9. } FIFO;

  10. extern FIFO RX_FIFO;
复制代码

然后你也需要一种方法把它读出来
  1. /* Create FIFO*/
  2. FIFO RX_FIFO = {.head=0, .tail=0};

  3. // returns bytes read (could be zero)
  4. // would be easy to make it end early on a stop char (e.g., \r or \n)
  5. uint8_t VCP_read(uint8_t* Buf, uint32_t Len)
  6. {
  7.   uint32_t count=0;
  8. /* Check inputs */
  9.   if ((Buf == NULL) || (Len == 0))
  10. {
  11.   return 0;
  12. }

  13. while (Len--)
  14. {
  15. if (RX_FIFO.head==RX_FIFO.tail) return count;
  16. count++;
  17. *Buf++=RX_FIFO.data[RX_FIFO.tail];
  18. RX_FIFO.tail=FIFO_INCR(RX_FIFO.tail);
  19. }

  20. return count;
  21. }

复制代码

使Semihosted Printf

如果您不希望printf转到串行端口,那么您可能希望将它重定向到gdb控制台(在Eclipse内部)。

1、添加到链接器选项:
  1. -specs=rdimon.specs -lrdimon
复制代码

2、在调试配置中,找到运行命令并添加:
  1. monitor arm semihosting enable
复制代码

3、在你的main()中,提前(在调用printf之前)进行此调用:
  1. initialise_monitor_handles();
复制代码
就是这样。现在printf将转到控制台。

重新目标Printf到UART

1、确保你有足够的堆栈!如果您没有在项目生成时设置它,请将其修复到.ld文件中(并确保也将其修复到CubeMX项目中,以防重新生成。

2、另外,使用IDE而不是CubeMX创建一个虚拟项目。偷的系统调用。c文件从那个项目,并把它放在你的项目。

3、显然,您需要在CubeMX中设置UART。

4、添加:

  1. int __io_putchar(int ch)

  2. {

  3. uint8_t ch8=ch;

  4. HAL_UART_Transmit(&huart1,(uint8_t *)&ch8,1,HAL_MAX_DELAY);

  5. return ch;

  6. }

  7. int __io_getchar()

  8. {

  9. uint8_t ch8;

  10. HAL_UART_Receive(&huart1,&ch8,1,HAL_MAX_DELAY);

  11. return 0;

  12. }
复制代码
完成了!神秘的崩溃意味着你的堆栈太小,或者你的启动跳投设置有问题,SP没有设置成你认为的那样。

笔记

1、STM32系统工作台

2、从ST网站安装CubeMX到Eclipse。

3、这块黑板必须有ST-Link 2或2-1。尽管其他工具可以处理,但ST-Link 1似乎无法工作。

4、如果使用PLL时钟,CubeMX有一个错误。在SystemClock_Config中,代码行应该是这样的:RCC_OscInitStruct。OscillatorType = RCC_OSCILLATORTYPE_HSE;

5、OpenOCD的设置是硬连接到.custom中的。当您创建配置时,cfg在您的项目目录中。所以如果你改变了什么,看起来你必须删除或编辑那个文件。

6、重要提示:除非您更改openOCD配置以使用:reset_config trst_only,否则调试器将无法工作。默认值不会工作。

7、如果为引导加载设置了引导跳线,调试就会正常工作。但是,您将得到引导装载程序堆栈指针,它是一个非常小的堆栈,可能会覆盖您的C库数据。这会导致奇怪和不可预知的行为。

8、如果您安装了eGit,就会得到Git集成。

9、如果您安装了TM终端,您可以在IDE中有一个终端。它应该支持串行,但在Ubuntu上,RXTX配置被处理。我没有修复它,而是运行一个shell终端并在其中运行picocom。工作很好。

原文请见hackaday

评分

参与人数 1 ST金币 -10 收起 理由
maxtch -10 请麻烦您停止侵权。

查看全部评分

收藏 评论1 发布时间:2018-11-5 10:20

举报

1个回答
maxtch 回答时间:2018-11-5 15:36:05
来源?

能不能麻烦您不要发布不带来源链接的机器翻译文章了?这既是对读者的不尊重,也是对作者著作权的侵犯。版主是不是可以警告此人?

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版