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

关于使用System Work bench 和 STM32 Bluebeal的说明

[复制链接]
eefishing 发布时间:2019-3-17 21:18
QQ浏览器截图20190317210931.png

描述:
我意识到我是垂死的人群中的一员,他们只使用emacs作为IDE。我决定和SystemWorkbench一起生活一段时间。很多事情需要处理,我的笔记可能会帮助你。



细节:
基于http://hackaday.com/2017/03/30/t ... uino-with-debugging上的评论,我决定让SystemWorkbench试试。


项目日志:
使用CDC USB串行接口的提示:
当你把USBCDC序列添加到你的项目中时,对于下一步该做什么你得不到太多帮助。CDC发送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. }
复制代码

启用半宿主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
  • 确保您有足够的堆栈!如果您没有在项目生成时设置它,请在.ld文件中修复它(并确保在cubemx项目中修复它,以防重新生成。
  • 另外,用IDE而不是cubemx创建一个虚拟项目。从该项目中窃取syscalls.c文件并将其放入项目中。
  • 显然,你需要在cubemx设置UART。
  • 添加:
  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没有设置成你认为的那样。

笔记
  • http://www.opensmt32.org/system+workbench+for+stm32
  • 将cubemx从ST网站安装到Eclipse中。http://www.st.com/en/development-tools/stsw-stm32095.html
  • 您必须具有用于此板的ST链接2或2-1。似乎不适用于ST链接1,即使其他工具可以处理。
  • 如果你用PLL时钟的话,库贝姆有一个错误。在SystemClock_配置中,行应该如下所示:rcc_oscinitstruct.sociatortype=rcc_sociatortype_hse;
  • 创建配置时,openocd的设置硬连接到项目目录中的.custom.cfg中。所以,如果你改变了任何东西,看起来你必须修改或编辑这个文件。
  • 重要提示:除非您将openocd配置更改为仅使用:reset_config trst_,否则调试器将无法工作。默认值将不起作用。
  • 如果将引导跳线设置为引导加载,则调试似乎可以工作。但是,您将得到引导装载程序stackpointer,它是一个非常小的堆栈,可能会覆盖您的C库数据。这将导致奇怪和不可预测的行为。
  • 如果安装eGit,就可以获得Git集成。
  • 如果安装tm终端,则可以在IDE中安装终端。据说它支持串行,但在Ubuntu上,RXTX配置是主机化的。我运行一个shell终端,在里面运行picocom,而不是修复它。工作良好。

原创:Al Williams
出处:http://hackaday.io/project/20879/logs





收藏 评论0 发布时间:2019-3-17 21:18

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

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