Notizen zum STM32-Selbststudium (kontinuierlich aktualisiert)

1. Der E/A-Port von STM32 kann Hochleistungsgeräte wie Relais und Summer nicht direkt ansteuern.

2. Die Deklaration erscheint möglicherweise nicht nach der ausführbaren Anweisung im Block, wenn Keil das STM32-Programm kompiliert.
Grund: In der .h-Datei sollte die Definition von Variablen am Anfang der Funktion platziert werden, und die Uhr kann nicht initialisiert werden oder andere Vorgänge sollten nicht initialisiert werden Zuerst wird die Variable ausgeführt und dann können die URL definiert werden
: https://www.cnblogs.com/yekongdexingxing/p/6605190.html

3. Keil kompiliert das mit Registern geschriebene LED-Programm und meldet einen Fehler main.c(15): Fehler: #165: zu wenige Argumente im Funktionsaufruf
Grund: Die Verzögerungsfunktion der Registerversion muss Parameter übergeben, was anders ist aus der Bibliotheksfunktionsversion (punktuelles Atom)
URL: http://www.openedv.com/posts/list/25039.htm

4. MDK meldet einen Fehler. Der Ausdruck muss beim Kompilieren einen Zeigertyp haben.
Lösung: Ändern Sie -> in der Struktur.
Spezifischer Code:

	GPIO_InitTypeDef GPIO_Init_Struct_GPIOB;
	GPIO_Init_Struct_GPIOB->GPIO_Pin=GPIO_Pin_8;

Ändern:

GPIO_InitTypeDef GPIO_Init_Struct_GPIOB;
GPIO_Init_Struct_GPIOB.GPIO_Pin=GPIO_Pin_8;

5. MDK hat eine Kompilierungswarnung: Warnung: #223-D: Funktion „key_init“ implizit deklariert
Grund: Strukturfehler beim Deklarieren der Funktion in der .h-Datei:

#ifdef _keybit
#define _keybit
....
#endif

Lösung: Ändern Sie #ifdef _keybit in #ifndef _keybit
6. MDK-Kompilierungswarnung: Letzte Zeile der Datei endet ohne Zeilenumbruch
Grund:
(1) Es gibt keinen Wagenrücklauf nach dem „}“ der Funktion oder #endif;
(2) Die Funktion steht nicht im oberen Feld, z. B.:

int main(void)
{
	......
}
若int或者‘{’或者‘}’没顶格写,也会出现这个警告

7. Das Programm wurde erfolgreich kompiliert, es liegt kein logischer Fehler vor und es gibt kein Problem mit der Konfiguration, aber es gibt kein Problem, wenn das Programm auf die Karte heruntergeladen wird. Lösungsprozess: Kopieren Sie
die .c-, .h- und Hauptfunktionen des Quellcodes, der normal in dem von Ihnen geschriebenen Programm ausgeführt werden kann. Kommentieren Sie Ihren eigenen Code aus, ermitteln Sie Schritt für Schritt, welche Datei das Problem darstellt, und stellen Sie schließlich fest, dass ein Problem mit der Reihenfolge der Initialisierung vorliegt. Zusammenfassung: In der Initialisierung,
danach Beim Definieren von Variablen sollten Sie die Uhr sofort initialisieren und die Reihenfolge kann nicht geändert werden. Wenn Sie zuerst keine Variablen definieren, siehe 2. Wenn Sie die Initialisierung der Uhr später durchführen, reagiert die Karte nicht, nachdem das Programm auf die Karte heruntergeladen wurde. 8. Das Format der Switch-Casey-Anweisung lautet wie
folgt folgt:

switch(表达式)
{
	case 值1:
	语句;
	break;
	case 值2:
	语句:
	break;
	...
	default:
	语句;
	break;//可不写
}

Wenn „{}“ nicht hinzugefügt wird, wird ein Fehler gemeldet: Eine Fallbezeichnung darf nur innerhalb eines Schalters
9 verwendet werden. Im STM32-Schlüsselexperiment können beim Durchführen eines Schlüsselscans die Schlüssel von PE2-PE4 nicht beurteilt werden Rückgabewert kann nicht abgerufen werden.
Grund: Die Bedingung in der if-Anweisung ist falsch geschrieben. Falscher Weg:

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1 || GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4)==0)

Die richtige Schreibweise ist:

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1 || GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0 || GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0 || GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)

10. Nach der Kompilierung erscheint in der Hauptfunktion eine Warnung: Funktion „exti_init“ implizit deklariert
Grund: Der in .h definierte Funktionsheader ist exti(), wird aber in .c zu exti_init(). Die Inkonsistenz zwischen den beiden führt zu einem Alarm
11. Makrodefinition Dies entspricht der Vergabe eines neuen Namens für den Port. Sie können am Ende des durch das Makro definierten Satzes kein Semikolon hinzufügen. Andernfalls tritt beim Zitieren des durch das Makro definierten Portnamens ein Phänomen auf Der Wert kann nicht zugewiesen werden. Die Eingabeaufforderung: erwartet einen Ausdruck 12.(PORTB&0x00000020)
>> 5; Nehmen Sie nur das 5. Bit von PORTB, die anderen sind alle 0, und verschieben Sie es dann um 5 Bits nach rechts, wenn das Ergebnis den niedrigen Pegel 0 hat , ist es 0x00000000, wenn das Ergebnis High Level 1 ist, ist es 0x00000001

Interrupt-Prioritäts-Preemption-Prioritäts-Interrupt-Gruppierung NVIC EXTI-
bezogene Wissensnachfolgeergänzung

Supongo que te gusta

Origin blog.csdn.net/weixin_44941350/article/details/117443837
Recomendado
Clasificación