決定寫寫東西記憶下。
長話短說。emmm
- 開發環境
Win10,64位系統,MDK5.25
- 目標
做一個流水燈例程(不重要),進行軟件模擬,調試做出波形圖來驗證程序是否符合預期
- 步驟
- 建立工程,project->new uvison project
- 選擇芯片,這個我隨便選擇了個stm32f103,沒有芯片的話用軟件自帶的pack installer在線官網裝或者自己網上找pack用pack installer import
- 下一步是選擇庫文件,主要是startup,stdperiph這些。
Cmsis裏面的core和device 裏面的startup是必須選的,流水燈用了gpio口,所以選擇gpio
Stdperiph drivers裏面根據需要選擇驅動,其中framework是必須的,gpio是根據需要來。
這時候下面會有個警告提示顯示需要RCC module,你可以點擊勾選stdperiph drivers 裏面的RCC,也可以選擇下面的resolve按鈕自動處理。
- 寫main.c文件
文件網上隨便找的,GPIOA.1,3,5輪流高低電平輸出
#include "stm32f10x.h"
u16 DelayCounter=0;
void Delay_Init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
SysTick_Config(SystemCoreClock / 1000);
}
void SysTick_Handler(void)
{
if(DelayCounter!=0)
{
DelayCounter--;
}
}
void Delayms(u16 ms)
{
DelayCounter=ms;
while(DelayCounter!=0);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5);
Delay_Init();
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
Delayms(500);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
Delayms(500);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
Delayms(500);
}
}
- 配置option for target,device,晶振(默認12MHZ,目前常用的是8MHZ),rom地址,debug,c/c++,output,listing這些都根據需要配置,我只配置了debug,其他的都沒改,默認。因爲想出波形圖,所以Debug裏面需要選擇勾選use simulator,界面底部的兩個dialog dll 要改成DARMSTM.DLL,parameter需要改成-pSTM32F103C8(我選擇的是STM32F103C8,你選擇的device不同芯片不一樣就要改不同STM32),最後OK
6,build,沒error,warning,一切ok之後,選擇debug,開啓debug session,(快捷鍵ctrl+F5)
7,選擇邏輯分析儀logic analyzer,點setup,確定信號(依次大寫字母建立PORTA.1,PORTA.3,PORTA.5),singnal play下面選擇display type:bit,勾選hexdecimal display.最後close 保存
8,run,(快捷鍵F5),zoom in/out/all放大縮小
波形符合預期