|
用STLINK來調試可以真實訪問查看寄存器的變化,下面就以串口輸出內容到上位機顯示為例,講述一下如何用STLINK來調試程序。
1.安裝STLINK驅動程序。因本例程需要用到串口將內容輸出到上位機,我的板子采用芯片CH340將USB轉串口,所以要安裝CH340 驅動。
2. 建立工程,將如圖文件包含到工程里。
20200531090752913.png (11.89 KB, 下載次數: 74)
下載附件
2021-2-25 23:39 上傳
3.Options for Target 選項卡在 Debug 欄選擇仿真工為具 Use:ST-Link Debugger,如圖依次 成4個步驟
20200531091535621.png (144.21 KB, 下載次數: 52)
下載附件
2021-2-25 23:40 上傳
然后點擊Settting進行STLINK參數設置,我選用SW模式,JTAG占用比較多的I/O,容易影響其他外設的使用,速率不要選擇太大,否則會出現問題。
20200531092257792.png (43.46 KB, 下載次數: 58)
下載附件
2021-2-25 23:41 上傳
接下來我們還需要在 Utilities 選項卡里面設置下載時的目標編程器
20200531092942693.png (58.75 KB, 下載次數: 61)
下載附件
2021-2-25 23:20 上傳
我們直接勾選 Use Debug Driver,即和調試一樣,選擇 ST LINK 來給目標器件的 FLASH 編程,然后點擊 Settings 按鈕,進入 FLASH 燒錄設置
20200531092942693 (1).png (75.72 KB, 下載次數: 47)
下載附件
2021-2-25 23:22 上傳
設置好后編寫程序,將硬件連接,下載后就點擊Debug后就可以實時跟蹤程序,很方便的找到程序的bug。
- void GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
- GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
- GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
- GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- void USART_Configuration(void)
- {
- USART_InitTypeDef USART_InitStruct;
- USART_InitStruct.USART_BaudRate=9600;
- USART_InitStruct.USART_WordLength=USART_WordLength_8b ;
- USART_InitStruct.USART_StopBits=USART_StopBits_1;
- USART_InitStruct.USART_Parity=USART_Parity_No;
- USART_InitStruct.USART_Mode=USART_Mode_Tx |USART_Mode_Rx;
- USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
-
- USART_Init(USART1,&USART_InitStruct);
-
- USART_Cmd(USART1, ENABLE);
-
- }
- void RCC_Configuration(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
-
- }
- void Delay_Ms(u16 time)
- u16 i,j;
- for(i=0;i<time;i++)
- for(j=10000;j>0;j--);
- }
- int main(void)
- {
- u8 i,data;
- RCC_Configuration();
- GPIO_Configuration();
- USART_Configuration();
- data='A';
- for(i=0;i<30;i++)
- {
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
- USART_SendData(USART1,data);
- data++;
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
- }
-
- return(0);
- }
復制代碼
|
評分
-
查看全部評分
|