标题: 使用STLINK进行程序调试 [打印本页]

作者: yinianchengfo    时间: 2021-2-25 23:34
标题: 使用STLINK进行程序调试
用STLINK来调试可以真实访问查看寄存器的变化,下面就以串口输出内容到上位机显示为例,讲述一下如何用STLINK来调试程序。
1.安装STLINK驱动程序。因本例程需要用到串口将内容输出到上位机,我的板子采用芯片CH340将USB转串口,所以要安装CH340 驱动。
2.  建立工程,将如图文件包含到工程里。
3.Options for Target 选项卡在 Debug 栏选择仿真工为具 Use:ST-Link Debugger,如图依次 成4个步骤


然后点击Settting进行STLINK参数设置,我选用SW模式,JTAG占用比较多的I/O,容易影响其他外设的使用,速率不要选择太大,否则会出现问题。


接下来我们还需要在 Utilities 选项卡里面设置下载时的目标编程器


我们直接勾选 Use Debug Driver,即和调试一样,选择 ST LINK 来给目标器件的 FLASH 编程,然后点击 Settings 按钮,进入 FLASH 烧录设置

设置好后编写程序,将硬件连接,下载后就点击Debug后就可以实时跟踪程序,很方便的找到程序的bug。
  1.          void GPIO_Configuration(void)
  2. {        
  3.          GPIO_InitTypeDef GPIO_InitStruct;
  4.          GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
  5.          GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
  6.          GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
  7.          GPIO_Init(GPIOA, &GPIO_InitStruct);
  8.          
  9.          GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
  10.          GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  11.          GPIO_Init(GPIOA, &GPIO_InitStruct);
  12. }

  13. void USART_Configuration(void)
  14. {
  15.         USART_InitTypeDef USART_InitStruct;
  16.         USART_InitStruct.USART_BaudRate=9600;
  17.         USART_InitStruct.USART_WordLength=USART_WordLength_8b ;
  18.         USART_InitStruct.USART_StopBits=USART_StopBits_1;
  19.         USART_InitStruct.USART_Parity=USART_Parity_No;
  20.         USART_InitStruct.USART_Mode=USART_Mode_Tx |USART_Mode_Rx;
  21.         USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  22.         
  23.         USART_Init(USART1,&USART_InitStruct);
  24.         
  25.         USART_Cmd(USART1, ENABLE);

  26.         
  27. }
  28. void RCC_Configuration(void)
  29. {
  30.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
  31.      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);  
  32.          
  33. }
  34. void Delay_Ms(u16 time)  
  35.         u16 i,j;
  36.         for(i=0;i<time;i++)
  37.                   for(j=10000;j>0;j--);
  38. }
  39. int main(void)
  40. {        
  41.    u8 i,data;
  42.    RCC_Configuration();
  43.    GPIO_Configuration();
  44.    USART_Configuration();
  45.    data='A';
  46.          for(i=0;i<30;i++)
  47.          {
  48.                  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  49.                  USART_SendData(USART1,data);
  50.                  data++;
  51.                  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  52.          }

  53.          
  54.          return(0);

  55. }
复制代码

20200531092942693.png (75.72 KB, 下载次数: 82)

20200531092942693.png

作者: Highnose    时间: 2021-2-26 09:48
感觉 bascom AVR 那样的语言才是单片机高级语言的出路,这寄存器级的C语言编程也是够了
作者: rayin    时间: 2021-2-26 11:08
很详细的指导, 何愁STM32不会?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1