使用STLINK进行程序调试

使用STLINK进行程序调试

通过串口来调试程序,每一次改动都要重新烧录到单片机,这样不仅不灵活,而且单片机的烧录次数是有限的,这样会影响到单片机的寿命。简单的程序可以拿串口来这样玩,但复杂的这样玩就太累了。通过查阅一些资料和各位博主的指点,学会了通过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 算法设置
    在这里插入图片描述
    这里 MDK5 会根据我们新建工程时选择的目标器件,自动设置 flash 算法。我使用的是STM32F103RCT6,FLASH 容量为 256K 字节,属于高容量系列,所以 Programming Algorithm里面默认会有 512K 型号的 STM32F10x High-density Flash 算法(注意:256K 和 512K 共用)。另外,如果这里没有 flash 算法,大家可以点击 Add 按钮,自行添加即可。最后选中 Reset and Run
    选项,以实现在编程后自动启动,其他默认设置即可。
  4. 设置好后编写程序
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);	//ʹÄÜAPB2ÍâÉèµÄGPIOAµÄʱÖÓ
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);  //ʹÄÜUSARTʱÖÓ		 
  	
}
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);

 }

接下来将硬件连接,下载后就点击Debug后就可以实时跟踪程序,很方便的找到程序的bug。

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值