標(biāo)題: 使用STLINK進(jìn)行程序調(diào)試 [打印本頁(yè)]

作者: yinianchengfo    時(shí)間: 2021-2-25 23:34
標(biāo)題: 使用STLINK進(jìn)行程序調(diào)試
用STLINK來(lái)調(diào)試可以真實(shí)訪問(wèn)查看寄存器的變化,下面就以串口輸出內(nèi)容到上位機(jī)顯示為例,講述一下如何用STLINK來(lái)調(diào)試程序。
1.安裝STLINK驅(qū)動(dòng)程序。因本例程需要用到串口將內(nèi)容輸出到上位機(jī),我的板子采用芯片CH340將USB轉(zhuǎn)串口,所以要安裝CH340 驅(qū)動(dòng)。
2.  建立工程,將如圖文件包含到工程里。
3.Options for Target 選項(xiàng)卡在 Debug 欄選擇仿真工為具 Use:ST-Link Debugger,如圖依次 成4個(gè)步驟


然后點(diǎn)擊Settting進(jìn)行STLINK參數(shù)設(shè)置,我選用SW模式,JTAG占用比較多的I/O,容易影響其他外設(shè)的使用,速率不要選擇太大,否則會(huì)出現(xiàn)問(wèn)題。


接下來(lái)我們還需要在 Utilities 選項(xiàng)卡里面設(shè)置下載時(shí)的目標(biāo)編程器


我們直接勾選 Use Debug Driver,即和調(diào)試一樣,選擇 ST LINK 來(lái)給目標(biāo)器件的 FLASH 編程,然后點(diǎn)擊 Settings 按鈕,進(jìn)入 FLASH 燒錄設(shè)置

設(shè)置好后編寫(xiě)程序,將硬件連接,下載后就點(diǎn)擊Debug后就可以實(shí)時(shí)跟蹤程序,很方便的找到程序的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. }
復(fù)制代碼

20200531092942693.png (75.72 KB, 下載次數(shù): 82)

20200531092942693.png

作者: Highnose    時(shí)間: 2021-2-26 09:48
感覺(jué) bascom AVR 那樣的語(yǔ)言才是單片機(jī)高級(jí)語(yǔ)言的出路,這寄存器級(jí)的C語(yǔ)言編程也是夠了
作者: rayin    時(shí)間: 2021-2-26 11:08
很詳細(xì)的指導(dǎo), 何愁STM32不會(huì)?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1