STM32 AVR. — .

AVR, (
1.7$/) ATMEGA328 (
1.4 $/).
| ATMEGA328 | STM32F103C8T6 | , |
---|
Flash, | 32 | 64 | 2 |
---|
, | 2 | 20 | 10 |
---|
, | 20 | 72 | 3.6 |
---|
, kSPS | 15 | 2*1000 ( ) | 133 |
---|
Dans le contexte d'une augmentation des indicateurs de performance de 10 à 100 fois, Flash n'a augmenté que de 2 fois. De plus, ces 64 ko sont consommés presque plus vite que 32 sur AVR. Il est logique d'utiliser de tels contrôleurs où des performances élevées sont nécessaires, mais il n'y a pas d'algorithmes gourmands en code ... par exemple, un oscilloscope.Apparence des tableaux de débogage: de gauche à droite:
- Arduino UNO (ATmega328P), 3,59 $ ;
- Notre planche, que nous tourmenterons (STM32F103C8T6), 4,97 $ ;
- Une autre carte de débogage sur STM32F103C8T6, 3,92 $ ;
- Arduino Nano (ATmega328P), 2,23 - 2,56 $ .
Comment programmer
Il existe de nombreux environnements de programmation STM32 - IAR, Keil, Coocox ... au début, il semble que ce soit bon et vous trouverez certainement quelque chose d’adapté. Vient ensuite la compréhension de la formation d'un tel zoo. Juste quelqu'un a fait un IDE pas très bon. Les autres l'ont regardé et ont décidé ce qu'ils pouvaient faire de mieux. Et ils l'ont fait. À certains égards, cela s'est avéré meilleur, quelque chose de pire. Après avoir lu les critiques et essayé l'IAR, je me suis installé sur Coocox.— STM32CubeMX. , STM32 , AVR. . STM32CubeMX , . , STM32CubeMX , , ! !
STMStudio — .
ST-Link V2
2.6$.
. JTAG,

ST-Link,

(ST-LINK -> JTAG):
- GND -> Pin 20;
- 3,3 V -> broche 1;
- RST -> broche 15;
- SWCLC -> broche 9;
- SWDIO -> Broche 7.
Exécutez CoIDE, écrivezCligner#include "stm32f10x.h"
int main(void)
{
RCC->APB2ENR |= RCC_APB2Periph_GPIOC;
GPIOC->CRH |= (0x3 << 20);
GPIOC->CRH &= (~(0xC << 20));
volatile long i = 0;
while(1)
{
GPIOC->BSRR = GPIO_BSRR_BR13;
for(i = 0; i < 1000*1000*5; i++){;};
GPIOC->BSRR = GPIO_BSRR_BS13;
for(i = 0; i < 1000*1000*5; i++){;};
}
}
, AVR, , 2264 Flash… , AVR
.
— 2176 .
STDLIB — 1476 .
compiler, flasher ... et tout a fonctionné tout de suite! Sans aucune danse avec un tambourin! Même le débogueur en circuit a fonctionné! Nous démarrons STMStudio - et cela fonctionne. Construit des graphiques de variables pendant le fonctionnement MK! Il y a des cavaliers sur la carte, mais vous n'avez rien à changer pour programmer / démarrer le MK! Comme avec un Arduino! Eh bien, ça ne peut pas être aussi bon ... mais ça ne peut pas.Commencez à fabriquer un oscilloscope
Dans mes rêves, l'oscilloscope devrait fonctionner comme suit:Les deux ADC traitent simultanément le signal à une vitesse de 1-2 MSPS. 2 options suivantes:- Tout cela est transféré en temps réel sur le PC via USB et une décision est prise quant à ce que vous en faites (rappelez-vous, créez un graphique, traitez-le d'une manière ou d'une autre, ...);
- . : (, , , ). .
Ces deux options n'ont pas pu être mises en œuvre.Le premier est parce que je n'ai pas pu démarrer USB. Au contraire, je ne pouvais générer le projet que dans STM32CubeMX. Mais après l'avoir exporté vers CoIDE, il était nécessaire de changer le chargeur de démarrage avec des cavaliers pour la programmation / opération, ce qui n'est pas pratique. J'ai donc refusé cette option. Eh bien, en plus, la vitesse USB n'est que de 12 Mb / s. Les données à haute vitesse en temps réel ne seront toujours pas adaptées. Afin de transférer les données sur l'ordinateur, j'ai connecté un convertisseur USB <-> UART acheté à l'époque pour la programmation de l'Arduino Pro Mini. La deuxième option a été couverte car le gestionnaire d'interruption dure plus longtemps que l'ADC. La vitesse était limitée à seulement 340-500 kSPS, ce qui est plusieurs fois moins que prévu.
La seule option à grande vitesse qui fonctionnait s'est avérée être la suivante: les ADC fonctionnent en continu lorsque nous avons besoin de mesurer, activer le DMA, attendre que le tampon se remplisse, désactiver le DMA et transférer lentement les données vers le PC via USART. Cette option a dépassé toutes les attentes. MK peut être overclocké pour qu'il devienne 9 MSPS avec deux ADC! Ceux. 4,5 fois plus que selon la documentation! Dans le même temps, il est assez confortable d'observer un signal avec une fréquence allant jusqu'à 1 MHz. Par rapport à ce que nous avons réussi à réaliser plus tôt sur Arduino (10 kSPS), le résultat est très bon - la vitesse a été multipliée par 900!Cependant, avec l'overclocking, tout n'est pas si joyeux. À l'avenir, pour que l'USB fonctionne, la fréquence devra être réduite de 16/9 = 1,8 fois, puis seulement 5 MSPS seront obtenus.En essayant de gérer les périphériques USB et autres, j'ai réalisé un inconvénient important de ces contrôleurs - il y a très peu d'informations sur Internet. Si l'AVR a un tas de tout, alors il s'est avéré difficile de trouver un exemple de fonctionnement simultané de deux ADC en mode entrelacé rapide .Arduino UNO! A été choisi comme générateur de signaux pour le test de l'oscilloscope. Pas parce qu'il est bon ou quelque chose ... c'est juste très rapide.Écrivez 8 lignes: void setup() {
pinMode(2, OUTPUT);
long d = 10;
for(;;){
PORTD = 255;
delayMicroseconds(d);
PORTD = 0;
delayMicroseconds(d);
}
}
void loop() {
}
USB + 1 ( 3.3 STM32 5 , 2 ) !
( ):


0.9 . 1 = 10 . 1 = 0.5.


10 . 1 = 5 . 1 = 2. - .
:
- USB, USB <-> USART;
- , 0 — 3.3 , ;
- ;
- ;
- .
En conclusion, j'attire l'attention sur deux inconvénients révélés du STM32 par rapport à l'AVR:- Augmentation de la consommation de mémoire Flash;
- Initialisation complexe de la périphérie, exacerbée par un manque de matériaux.
Je ne sais pas comment, mais pour une tâche aussi simple, il a fallu 31 Ko de Flash.Le circuit de la carte de débogage (ce n'était pas facile à trouver).La deuxième partie de l'article.