KEIL查看寄存器調試技巧__及其ST-LINK 燒寫報錯"no target connected"解決方案


ST-LINK 燒寫報錯"no target connected"

STM32調試器配置異常導致的問題與解決方法(一)

原因:我把PA、PE相關的寄存器值寫錯了

**復制粘貼時沒注意,寫少了取反符號**
錯誤代碼

    //MODE:輸入
    GPIOA->MODER &= (0x3 << (2*0)); //清零
    GPIOE->MODER &= (0x3 << (2*2))|(0x3 << (2*3))|(0x3 << (2*4));

這樣導致了其他位被置為0了,而需要更改的位卻沒有更改

這里剛好把 SWDIO 端口占用了,導致發現不了設備
image
錯誤代碼導致的結果
image
image

SWDIO所需端口被修改了模式,導致用不了SW協議

正確代碼

    //MODE:輸入
    GPIOA->MODER &= ~(0x3 << (2*0)); //清零
    GPIOE->MODER &= ~(0x3 << (2*2))|(0x3 << (2*3))|(0x3 << (2*4));

這樣才是把需要的位置0

解決方法:

改為“連接調試燒寫器時就復位
image
然后燒寫正常的代碼試試,可以的話再把原來的代碼改正后燒寫。

改成這樣的副作用:接上就直接復位了

Keil 查看片上外設寄存器技巧

正常編譯燒寫后,在 Debug 調試模式下
image
點擊Debug菜單里的 Start/Stop Debug Session 即可開啟 Debug 調試模式,然后點擊 Peripherals菜單里的 System Viewer 系統視圖即可選擇某個外設的寄存器視圖

image

效果圖如下
GPIOA的MODER寄存器
image
GPIOA的IDR寄存器,這里能顯示每一個關鍵位置的0和1
image
GPIOA的AF寄存器,這里非常簡潔地看到 端口1到3 的值為 0x01,即開啟復用 AF1
image

TIM2定時器的寄存器值,如CCR1的高低位,CCR2的高低位,
image

可見,這讓我們能快速找出寄存器值的關鍵位是否正確,而不必查看整個寄存器的值並手動計算每個位的數值

開發環境優化

建議編輯項目代碼和編譯燒寫用 VSCode 搭配C/C++ 插件和 keil assistant 插件
調試用 KEIL (如上面的 System Viewer)
image

注意:當然,添加新文件到Keil項目還是需要在Keil里面添加,然后再Keil編譯一下保存。

內聯函數

需要注意的地方有:
image

image

不同編譯器的定義
image

也就是:用C99,debug模式不優化代碼不內聯


我的用法,一般是在寄存器操作的地方寫,因為涉及寄存器操作的要快,並且我也不想要堆棧開銷 ,在頭文件里這么寫:
// led_color.h
#ifndef LED_COLOR_H__
#define LED_COLOR_H__

#include "stm32f4xx.h"

//注意以下這個內聯
__INLINE void led_color_change(u16 r, u16 g, u16 b) {
    TIM_TypeDef * TIMx=TIM2;
    TIMx->CCR2 = r;
    TIMx->CCR3 = g;
    TIMx->CCR4 = b;
}

#endif
// main.c
#include "stm32f4xx.h"
#include "led_color.h"

extern __INLINE void led_color_change(u16 r, u16 g, u16 b); //注意這行

int main(void) {
	while(1)
	{
		led_color_change(2,45,239);
	}
}

詳見 C99/C11 的inline
https://zh.cppreference.com/w/c/language/inline

image

TIM的arr寄存器

這個寄存器不能一直寫入,不然在裸機里程序實時度高,PWM接上LED燈后肉眼根本看不到燈光變化

STM32 手冊說明

STM32 是 ST 公司出品的基於 ARM 內核的處理器。
ARM 內核是 ARM 公司的內核。
關系:ST 購買 ARM 授權,然后 ARM 公司授權給 ST 基於 ARM 內核定制自己的處理器的商業權力

架構圖如下:
image

其中 ARM Cortex-M4 是 ARM 內核部分,其他部分都是 ST 公司的定制部分

  1. F4xx系列參考手冊(適用於整個F4xx系列,ST公司出品)
    image

image

  1. F407 具體芯片手冊(對F4xx系列手冊的具體芯片補充說明,ST公司出品)
    image

image

  1. CM 內核權威手冊(ARM 公司出品)
    書名:《The Definitive Guide to ARM® Cortex®-M3 and Cortex-M4 Processors》Third Edition
    作者:Joseph Yiu
    公司:ARM Ltd., Cambridge, UK

例如:NVIC中斷屬於ARM內核,所以應該在這里查閱,而非 ST 手冊

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM