Hallo zusammen, ich programmiere jetzt seit einiger Zeit mit ARM Prozessoren. Angefangen habe ich mit einem STM32F401RE Board und bin jetzt bei einem eigenen PCB mit STM32F429BI Mikrocontroller. Ich arbeite mit der JumpStart C for Cortex-M IDE mit eigener Cortex-M API. Mit der API kann man ganz einfach einen pin mit: portb.MakeOutput(10, OSPEED_VERYHIGH); und portb.Set(10); portb.Clear(10); ansteuern. Damit habe ich auch einen I2C Bus programmiert. Jetzt will ich das ganz auf richtiges C Pin ansteuern um programmieren. Bisher kann ich mit: GPIOB ->BSRRL | GPIO_BSRR_BS10; GPIOB ->BSRRH | GPIO_BSRR_BS10; die Pins hoch und runter setzen (Habe ich mit der angehängten Datei gemacht). Ich weiß aber, das man dass auch mit z.B.: SDA = 1; SDA = 0; Pins setzen kann. Ich würde das richtige Register ansteuern und die damit zusammenhängende Hardware Zugriffe gerne lernen. Wie genau erstelle ich jetzt solche Hardware Zugriffe ? Vielen Dank für eure Hilfe
Gast
#5969399
Raphael K. schrieb: > Wie genau erstelle ich jetzt solche Hardware Zugriffe ? Schau dir am besten mal eine beliebige HAL an (z.B. libopencm3 oder die offizielle ST-HAL). Dort kannst du alle notwendigen Registeraufrufe ableiten.
Beitrag #5969401 wurde von einem Moderator gelöscht.
low level (nur zum verstehn was vor sich geht) für ein 401RE Nucleo board:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
abc schrieb: > Raphael K. schrieb: >> Wie genau erstelle ich jetzt solche Hardware Zugriffe ? > > Schau dir am besten mal eine beliebige HAL an (z.B. libopencm3 oder die > offizielle ST-HAL). Dort kannst du alle notwendigen Registeraufrufe > ableiten. Gibt es da auch genauere Infos ? Die HAL von ST hat mehr als 1800 Seite!!! https://www.st.com/content/ccc/resource/technical/document/user_manual/2f/71/ba/b8/75/54/47/cf/DM00105879.pdf/files/DM00105879.pdf/jcr:content/translations/en.DM00105879.pdf
Gast
#5974312
Raphael K. schrieb: > Ich weiß aber, das man dass auch mit z.B.: > > SDA = 1; > SDA = 0; > > Pins setzen kann. Und woher weißt du das, bzw. glaubst du, das zu wissen? Also, die GPIO-Peripherie-Cores sind von Hersteller zu Hersteller und Chipfamilie zu Chipfamilie durchaus unterschiedlich. Was also beim einen funktioniert, muß beim anderen ganz anders gemacht werden. Das solltest du dir gut merken. Bei vielen Chip-Sorten gibt es mehrere Methoden, Pins zu setzen. Eine davon besteht darin, daß es zusätzlich zu den eigentlichen GPIO-Registern noch ein Array gibt (komme grad nicht auf den Namen), wo jedes einzelne Pin einem Byte, Word oder DWord zugeordnet ist, so daß man dort tatsächlich so schreiben kann wie du oben. Aber das gibt's nicht ÜBERALL. Also lies dir das GPIO-Kapitel im RefManual für deinen Chip gründlich durch, um zu erfahren, was man da so alles machen kann. W.S.
Raphael K. schrieb: >> Schau dir am besten mal eine beliebige HAL an (z.B. libopencm3 oder die >> offizielle ST-HAL). Dort kannst du alle notwendigen Registeraufrufe >> ableiten. > > Gibt es da auch genauere Infos ? > > Die HAL von ST hat mehr als 1800 Seite!!! Noch genauer als 1800 Seiten? Die nächsthöhere Genauigkeitsstufe wäre wohl in den Code der HAL selber reinzuschauen, dort steht alles supergenau drin, sogar das was in den 1800 Seiten nicht steht.
Gast
#5974404
Lies mal diesen Absatz: http://stefanfrings.de/stm32/stm32f3.html#digital Das wurde für den STM32F3 geschrieben, aber ich denke, es trifft auf den STM32F4 ebenso zu. Das Anwendungsbeispiel steht weiter oben auf der Seite: http://stefanfrings.de/stm32/stm32f3.html#delayloop Es verwendet die CMSIS Makros SET_BIT, MODIFY_REG und WRITE_REG, die auch in HAL Projekten zur Verfügung stehen, weil die HAL auf CMSIS aufbaut. Diese (und ein paar weitere) Makros sind von ARM standardisiert. Die konkreten Register auf die man zugreifen muss sind allerdings Hersteller-Spezifisch. Sie sind in https://www.st.com/content/ccc/resource/technical/document/reference_manual/3d/6d/5a/66/b4/99/40/d4/DM00031020.pdf/files/DM00031020.pdf/jcr:content/translations/en.DM00031020.pdf Kapitel 8 (General-purpose I/Os GPIO) beschrieben.
Stefanus F. schrieb: > Es verwendet die CMSIS Makros SET_BIT, MODIFY_REG und WRITE_REG, die > auch in HAL Projekten zur Verfügung stehen, weil die HAL auf CMSIS > aufbaut. Diese (und ein paar weitere) Makros sind von ARM > standardisiert. Ich meine (d.h. bin mir nicht ganz sicher), dass die Makros SET_BIT, MODIFY_REG, etc. eine Dreingabe von ST sind und nicht CMSIS-Standard. Man kann sie sich natürlich jederzeit für einen Controller eines anderen Herstellers anlegen. Ist ja alles kein Hexenwerk.
Christopher J. schrieb: > Ich meine (d.h. bin mir nicht ganz sicher), dass die Makros SET_BIT, > MODIFY_REG, etc. eine Dreingabe von ST sind und nicht CMSIS-Standard. > Man kann ...natürlich auch komplett auf diesen Blödsinn verzichten denn die machen mehr Tipparbeit und Obfuskation als sie nützen.
Bernd K. schrieb: >> Man kann > > ...natürlich auch komplett auf diesen Blödsinn verzichten denn die > machen mehr Tipparbeit und Obfuskation als sie nützen. oder so. Jeder wie er mag ;)
Gast
#5974518
Christopher J. schrieb: > Ich meine (d.h. bin mir nicht ganz sicher), dass die Makros SET_BIT, > MODIFY_REG, etc. eine Dreingabe von ST sind und nicht CMSIS-Standard. Hmm, jetzt wo du es sagst... guck nach....scheint zu stimmen. Die Makros sind trivial und daher sicher Geschmackssache. MODIFY_REG finde ich hilfreich, um besser lesbaren Code zu schreiben.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.