Tester la fonctionnalité de base du tableau de développement microspython mm32f3277 Flying - by - flying

Zhuo Qing 2021-10-29 00:21:31
tester la fonctionnalit base du

Jane. Suke: Pour unMicroPythonLa version transplantée a été testée à titre préliminaire.En revanche,MCUIl y a beaucoup de modules qui ne sont pas encore pris en charge.Ces travaux doivent être complétés dès que possible par des essais supplémentaires à court terme.

Mots clés MM32,MicroPython

 

§01 MicroPythonDéveloppement


Un.、Fiche d'information

Pour être en mesure de Concours national de voitures intelligentes pour les étudiants universitaires Introduction basée sur MicroPython Modèle de développement,.Les étudiants qui ne sont pas des professionnels de l'électronique peuvent participer à la course de voiture intelligente.En fait, dans les courses précédentes,Basé surNXPDeOpenMV,OpenARTLes modules ont été adoptés etMicroPythonModèle de développement,Mais ces modules ne sont pas encore en mesure de fournir plus de ports pour le développement de modèles de course de voitures intelligentes.

1、Module matériel

Voici un micro - ordinateur à puce unique basé sur la technologie Flying - by - FlyingMM32F3277Module de développement pour,Qui a été initialement inhibéMicroPythonL'environnement de.

In La mise en service vient de voler MM32F3277 La transplantation a MicroPythonConseil de développement Des informations sur le Conseil de développement sont présentées , Et a établi le passage REPL Une chaîne d'outils pour le développement interactif .

▲ Fig.1.1.1 Module de base envoyé en vol

▲ Fig.1.1.1 Module de base envoyé en vol

2、Modèle de développement

Utilisation STM32 Bootloader Composition du logiciel MicroPythonDeREPL Interface interactive , Et peut mettre le MicroPython Télécharger le programme à MM32Direct.En même temps,REPL Afficher les informations de sortie .

2.、 Matériel de Conseil de développement

1、 Instructions de fonctionnement du tableau d'essai

Voici les instructions d'exploitation du matériel de développement envoyé par Flying - by - Flying Technology .

Préparation des essais:

Connectez une carte mère normale , La plaque envoyée a été connectée à l'écran et insérée SDCarte;

▲ Fig.1.2.1 Avant du matériel du tableau de développement

▲ Fig.1.2.1 Avant du matériel du tableau de développement

S'il vous plaît utiliser la batterie ou la source de tension stabilisée pour alimenter à partir du cordon d'alimentation , La tension est recommandée 8V(Plus que6VC'est tout.).
Ou on peut utiliser un noyau noir Type-CAlimentation électrique, Mais n'utilisez que Type-C Pas d'accès à l'appareil à gouverner pendant l'alimentation électrique .

▲ Fig.1.2.2 Derrière la version de développement SDFente de carte

▲ Fig.1.2.2 Derrière la version de développement SDFente de carte

Au dos. SD Prise de carte ,ConnectéSDCarte, Activer la carte de fonctionnement par défaut main.py, Le phénomène est sur le noyau noir LEDClignotant.

Connexion aux paramètres environnementaux :

▲ Fig.1.2.3 Interface de téléchargement du port de débogage du tableau de développement

▲ Fig.1.2.3 Interface de téléchargement du port de débogage du tableau de développement

Port série connectez le port série de l'interface de téléchargement et de débogage de la Carte Noire ,Taux de Baud115200, Passez par ici après l'allumage RPELInteraction,Il est important de noter que,SiSD Kane a déjà main.py Alors la priorité sera donnée main.py:

▲ Fig.1.2.4 Terminal sériePuTTYInterface

▲ Fig.1.2.4 Terminal sériePuTTYInterface

En ce moment, c'est SD Kane main.pyDocumentation, Notre accessoire SD La carte devrait Python Le programme ne définit pas la sortie , Donc il n'y a pas d'accès RPEL.

Il fautSDCartemain.py Supprimer ou boucler le fichier , Ici, nous choisissons de supprimer le fichier , Rechargez la carte et Réinitialisez :

▲ Fig.1.2.5 EntréeREPL Effectuer l'état de mise en service

▲ Fig.1.2.5 EntréeREPL Effectuer l'état de mise en service

Entrez maintenantRPEL, Et produit MicroPythonVersion.

Essayez.PythonExécution des déclarations:

Sur la base des exemples ci - joints pyDocumentation, Vous pouvez essayer d'exécuter l'effet d'affichage

▲ Fig.1.2.6 ExécutionLCD180.help()Après les résultats

▲ Fig.1.2.6 ExécutionLCD180.help()Après les résultats

Exécuter l'instruction ci - dessus , Correspond à l'énergie électrique LCD L'écran se rafraîchit en rouge plein écran et affiche SEEKFREEMots.

2、 Schéma du tableau d'essai

Les principes peuvent être téléchargés à partir du lien suivant : MM32F3277Schéma du tableau principal

(1) Carte mère centrale

▲ Fig.1.2.7 Définition de la broche de la carte mère centrale

▲ Fig.1.2.7 Définition de la broche de la carte mère centrale

(2) Définition de la fonction du plan arrière

▲ Fig.1.2.8 Définition de l'interface du plan arrière

▲ Fig.1.2.8 Définition de l'interface du plan arrière

(3) Schéma du sous - circuit du plan arrière

▲ Fig.1.2.9 5V Schéma d'alimentation électrique

▲ Fig.1.2.9 5V Schéma d'alimentation électrique

Il y a 3- Oui.3.3V L'alimentation électrique est fournie séparément pour un usage général 3.3V,Caméra, Puissance de l'amplificateur opérationnel .
▲ Fig.1.2.10 Caméra3.3VAlimentation électrique

▲ Fig.1.2.10 Caméra3.3VAlimentation électrique

▲ Fig.1.2.11 Alimentation électrique de l'appareil à gouverner

▲ Fig.1.2.11 Alimentation électrique de l'appareil à gouverner

▲ Fig.1.2.12 Définition partielle de la broche d'interface

▲ Fig.1.2.12 Définition partielle de la broche d'interface

▲ Fig.1.2.13 Définition partielle de la broche d'interface

▲ Fig.1.2.13 Définition partielle de la broche d'interface

▲ Fig.1.2.14 Définition partielle de la broche d'interface

▲ Fig.1.2.14 Définition partielle de la broche d'interface

Trois、MicroPythonFonction

VoiciMM32F3277 A été transplanté MicroPythonFonction. Cet article fait un essai préliminaire de ces fonctions .
▲ Fig.1.3.1 Maintenant transplanté MicroPythonFonctions auxiliaires

▲ Fig.1.3.1 Maintenant transplanté MicroPythonFonctions auxiliaires

 

§02 GongPeut tester


Un.、GPIOTests

1、GPIOProduits

(1)Code d'essai

from seekfree import GPIO
pinpg1 = GPIO(0x67, 1, 1)
print("Test GPIO .")
while True:
pinpg1.low()
pinpg1.high()

(2)Résultats des tests

Mesure à l'aide d'un oscilloscope MM32Du moduleG7 Forme d'onde pin .

▲ Fig.2.1.1 Mesure à l'aide d'un oscilloscope MM32Du moduleG7 Forme d'onde pin

▲ Fig.2.1.1 Mesure à l'aide d'un oscilloscope MM32Du moduleG7 Forme d'onde pin

▲ Fig.2.1.2 G7 Forme d'onde de sortie du port

▲ Fig.2.1.2 G7 Forme d'onde de sortie du port

Réussir les tests ci - dessus ,Je vois.MicroPython La période suivante pour le fonctionnement du port est d'environ :22.28 μ s \mu s μs.

Comme le code ci - dessus est finalement un cycle mort ,Il faut donc passer parMM32 Réinitialiser pour appeler à partir d'un cycle mort .

(3) Modifier le port de débogage

Pour pouvoir contrôler à partir du logiciel MM32Réinitialiser, Ajouter au port de débogage d'origine NRSTLigne de contrôle.

▲ Fig.2.1.3 Modifier le port de débogage ,AjouterRSTPort de contrôle

▲ Fig.2.1.3 Modifier le port de débogage ,AjouterRSTPort de contrôle

PourSTM32DeMPDLD Ajout de MM32 Processus de Réinitialisation .

if(strncmp(szString, "MPDLD", 5) == 0) {
 // MicroPython Dlownload
char szString[0x8000];
strcpy(szString, "");
Clipboard()->GetTextBuf(szString, sizeof(szString) - 1);
ClearInfor();
ShowInfor("Reset MicroPython...");
RTSEnable(1, PORT1);
Sleep(50);
ClearPort(PORT1);
RTSEnable(0, PORT1);
Sleep(100);
ShowInfor("Wait for MicroPython comeback...");
for(;;) {

char c;
if(ReceChar(&c, PORT1) == 0) break;
}
int nLength = strlen(szString);
int i;
int nLine = 0;
for(i = 0; i < nLength; i ++) {

if(szString[i] == '\r') nLine ++;
}
char szTemp[512];
sprintf(szTemp, "Download MicroPython : %d lines/%d characters.", nLine, nLength);
ShowInfor(szTemp);
ShowInfor("Begin to download programm...");
Sleep(100);
MessageBeep(0);
SendChar(0x2, PORT1); // Send CTRL+B
Sleep(100);
SendChar(0x5, PORT1); // Send CTRL+A
Sleep(100);
for(i = 0; i < nLength; i ++) {

ProgressBar1->Position = (i + 1) * 100 / nLength;
SendChar(szString[i], PORT1);
}
for(;;) {

char c;
if(ReceCharL(&c, PORT1, 20) > 0) break;
}
ShowInfor("-------------------------------------------------------------------------");
SendChar(0x4, PORT1); // Send CTRL+B
return;
}

Après modification, Pour les programmes de recyclage , Il est également facile de télécharger automatiquement le programme .

(4)Teststoggle

from seekfree import GPIO
pinpg1 = GPIO(0x67, 1, 1)
print("Test GPIO .")
while True:
pinpg1.toggle()

▲ Fig.2.1.4 toggle() La forme d'onde de sortie correspondant à la fonction

▲ Fig.2.1.4 toggle() La forme d'onde de sortie correspondant à la fonction

Vu la forme d'onde ci - dessus , toggle( ) Temps d'exécution légèrement plus long low(), high()Plus lentement..

2、LED

Il n'y a pas de timeModule, Ce module peut fournir des opérations retardées .Donc,, .L'intervalle ne peut être réalisé que par un délai logiciel .

Connectez le port série sans fil HEADERDansC6,C7,GND,+5VExportation,TestsGPIOContrôle de sortieLED.

from seekfree import GPIO
led1 = GPIO(0x26, 1, 1)
led2 = GPIO(0x27, 1, 0)
print('Test LED.')
while True:
def delay(loop):
for _ in range(loop):
pass
led1.high()
led2.low()
delay(20000)
led1.low()
led2.high()
delay(20000)

▲ Fig.2.1.5 LED Délai clignotant

▲ Fig.2.1.5 LED Délai clignotant

3、Bouton test

▲ Fig.2.1.6 Touches et interrupteurs sur la carte de circuit

▲ Fig.2.1.6 Touches et interrupteurs sur la carte de circuit

(1)Matériel

Comme le montre le diagramme de circuit matériel précédent , Quatre touches sont intégrées sur la carte de circuit :G0,G1,G2,G3. Les ports correspondants sont :GPIOG0, G1,G2,G3.

▲ Fig.2.1.7 Quatre touches sur le tableau de développement

▲ Fig.2.1.7 Quatre touches sur le tableau de développement

(2)Logiciel de test

from seekfree import GPIO
led1 = GPIO(0x26, 1, 1)
led2 = GPIO(0x27, 1, 0)
btn1 = GPIO(0x60, 0, 1)
btn2 = GPIO(0x61, 0, 1)
btn3 = GPIO(0x62, 0, 1)
btn4 = GPIO(0x63, 0, 1)
print('Test LED.')
def delay(loop=50000):
for _ in range(loop):
pass
while True:
print([btn1.value(), btn2.value(), btn3.value(), btn4.value()])
delay(50000)

4、 Testez l'interrupteur de cadran

Il y a aussi deux interrupteurs de cadran sur la carte de circuit ,Correspondant séparémentD14,D15.AdoptionGPIO On peut lire leur état . Le test est effectué de la même manière que pour les touches ci - dessus .

from seekfree import GPIO
print('Test LED.')
def delay(loop=50000):
for _ in range(loop):
pass
led1 = GPIO(0x26, 1, 1)
led2 = GPIO(0x27, 1, 0)
btn1 = GPIO(0x60, 0, 1)
btn2 = GPIO(0x61, 0, 1)
btn3 = GPIO(0x62, 0, 1)
btn4 = GPIO(0x63, 0, 1)
sw1 = GPIO(0x3e, 0, 1)
sw2 = GPIO(0x3f, 0, 1)
while True:
print([btn1.value(), btn2.value(), btn3.value(), btn4.value(), sw1.value(), sw2.value()])
delay(50000)

▲ Fig.2.1.8 Touches de mesure et interrupteurs de cadran

▲ Fig.2.1.8 Touches de mesure et interrupteurs de cadran

2.、ADCTests

1、ADC.help()

▲ Fig.2.2.1 ADC.help() Afficher le message

▲ Fig.2.2.1 ADC.help() Afficher le message

2、adc.value()

Connectez le connecteur du module électromagnétique à la plaque de pain , Utiliser un potentiomètre pour obtenir une tension différente ,Envoyé àA4.

▲ Fig.2.2.2 Acquis1024 - Oui.ADCValeur numérique

▲ Fig.2.2.2 Acquis1024 - Oui.ADCValeur numérique

Variance des données : 5.

Parce queMicroPython Les opérations en virgule flottante ne sont pas prises en charge . Il faut donc utiliser un nombre entier pour effectuer les calculs pertinents .

from seekfree import ADC,GPIO
adc = ADC(0)
adc.channel_init(adc.A4)
print('Test ADC.')
def delay(loop=50000):
for _ in range(loop):
pass
def sqrt(x):
left = 0
right = x//2+1
while left < right:
middle = left + (right-left+1)//2
square = middle * middle
if square > x:
right = middle-1
else: left = middle
return left
SAMPLE_NUM = 1024
adcdim = [0]*SAMPLE_NUM
for i in range(SAMPLE_NUM):
adcdim[i] = adc.value(adc.A4)
print(adcdim)
count = 0
for s in adcdim:
count += s
average = count//SAMPLE_NUM
sigma = 0
for s in adcdim:
ss = s - average
sigma += ss**2
print(sqrt(sigma//SAMPLE_NUM))

Trois、PWMTests

Sur la bêta PWMPasser séparémentA0,A1,A2,A3Produits.

1、Test de base

from seekfree import PWM,GPIO
pwm = PWM(16000)
pwm.channel_init(pwm.A0, 5000)
print("Test PWM")
  • duty = 5000
    ▲ Fig.2.3.1 A0ProduitsPWMForme d'onde
    ▲ Fig.2.3.1 A0ProduitsPWMForme d'onde
  • duty = 500

▲ Fig.2.3.2 A0ProduitsPWMForme d'onde

▲ Fig.2.3.2 A0ProduitsPWMForme d'onde

2、UtilisationADCChangementPWM

from seekfree import PWM,GPIO,ADC
pwm = PWM(16000)
pwm.channel_init(pwm.A0, 500)
adc = ADC(0)
adc.channel_init(adc.A4)
def delay(loop=50000):
for _ in range(loop):
pass
print('Test PWM...')
while True:
adcvalue = adc.value(adc.A4)
pwmvalue = adcvalue*10000//0x1000
print(adcvalue, pwmvalue)
pwm.duty(pwm.A0, pwmvalue)
delay(10000)

▲ Fig.2.3.3 Secouée PWM

▲ Fig.2.3.3 Secouée PWM

Par paires ADC Après avoir fait la moyenne ,ContrôlePWM, La forme d'onde est très stable .

from seekfree import PWM,GPIO,ADC
pwm = PWM(16000)
pwm.channel_init(pwm.A0, 5000)
adc = ADC(0)
adc.channel_init(adc.A4)
def delay(loop=50000):
for _ in range(loop):
pass
print('Test PWM...')
while True:
sigma = 0
for i in range(256):
sigma += adc.value(adc.A4)
adcvalue = sigma//256
pwmvalue = adcvalue*10000//0x1000
pwm.duty(pwm.A0, pwmvalue)
delay(1000)

▲ Fig.2.3.4 AdoptionADCChangementPWMCycle de service

▲ Fig.2.3.4 AdoptionADCChangementPWMCycle de service

Quatre、TimerTests

1、Test de base

Définir la fonction de rappel du minuteur .

from seekfree import TIMER,GPIO
led1 = GPIO(0x26, 1, 1)
led2 = GPIO(0x27, 1, 0)
def timer_callback(s):
led1.toggle()
print(s.count())
tim = TIMER(200)
tim.callback(timer_callback)
while True:
pass

 

MesureRésumé des essais ※


C'est exact.ÀMM32DeMicroPythonLa version transplantée a été testée à titre préliminaire. Vous pouvez également voir que cette version du travail de migration a encore besoin d'un certain enrichissement .

  • Manquant pour SPI, I2C,CAN Prise en charge du bus .
  • Manque de support pour les opérations flottantes ;
  • Manquant pour SD Prise en charge de l'accès aux fichiers de carte ;

Les fonctions ci - dessus doivent être encore améliorées par des compléments ultérieurs .


■ Liens vers des documents connexes:

● Liens graphiques connexes:

版权声明
本文为[Zhuo Qing]所创,转载请带上原文链接,感谢
https://pythonmana.com/2021/10/20211029000345559c.html

  1. django 自定義中間件如何忽略部分視圖函數
  2. python map函数的使用
  3. python map函數的使用
  4. Utilisation de la fonction de carte Python
  5. 通过对于Arduino或是Python(包括相关库)的使用,结合自己的日常工作,描述相关知识在工作中起到了什么作用。
  6. 2021最全Python接口测试自动化教程【附学习资料】
  7. Python读取配置文件(config.ini),写入配置文件
  8. Python lit le profil (config.ini), écrit le profil
  9. python 两个数据列表匹配查找
  10. python 兩個數據列錶匹配查找
  11. Recherche de correspondance de deux listes de données Python
  12. python循环结构程序编写题目
  13. 【算法学习】1603. 设计停车系统(java / c / c++ / python / go / rust)
  14. Problèmes de programmation de la structure de la boucle Python
  15. 有人能用python写出代码吗wwww
  16. [apprentissage de l'algorithme] 1603. Conception du système de stationnement (Java / C / C + + / python / go / Rust)
  17. Python中if和else,总是显示无效语法是缩进问题吗?是的话可以详细讲解一下吗?
  18. Python的问题,希望有人帮帮忙
  19. Python的問題,希望有人幫幫忙
  20. J'espère que quelqu'un peut m'aider.
  21. Si et autrement en python, est - ce un problème d'indentation d'afficher toujours une syntaxe invalide? Oui, puis - je vous expliquer en détail?
  22. Quelqu'un peut écrire du Code en python?
  23. Dataframe数据,用pandas.to_excel导出成excel问题
  24. Données du cadre de données, en utilisant pandas.to Exporter Excel vers un problème Excel
  25. 请问这个过期的要怎么弄呀,Python是下载的3.10版本的
  26. 請問這個過期的要怎麼弄呀,Python是下載的3.10版本的
  27. Qu'est - ce qu'on fait de ce vieux python?
  28. Python数据处理转置问题??
  29. Problèmes de transposition du traitement des données python??
  30. 使用python的pdfkit把html转pdf时,echarts无法显示
  31. python利用3维的0,1矩阵再matplotlib中画图
  32. Pycham developing Django project template tutorial
  33. Libraries commonly used in Python data analysis
  34. Python utilise une matrice tridimensionnelle 0, 1 pour redessiner les graphiques dans matplotlib
  35. 预备知识-python核心用法常用数据分析库(上)
  36. 預備知識-python核心用法常用數據分析庫(上)
  37. 我在python上创建了个web静态服务器,把一个前端页面,放进去然后在静态服务器上访问只出现了前段页面的代码,代码运行正常,这是怎么回事
  38. Preliminary Knowledge - Python Core use Common Data Analysis Library (ⅰ)
  39. 预备知识-python核心用法常用数据分析库(上)
  40. J'a i créé un serveur Web statique sur Python, j'ai mis une page frontale, j'ai accédé au Code sur le serveur statique qui n'avait que des pages frontales, et le Code fonctionnait correctement
  41. 预备知识-python核心用法常用数据分析库(下)
  42. python 文件排版,怎么控制写入在对应文件的位置(要写吐了,真是服了)
  43. Preliminary Knowledge - Python Core use Common Data Analysis Library (ⅰ)
  44. Typographie de fichiers Python, comment contrôler l'écriture à l'emplacement du fichier correspondant (pour écrire et vomir, vraiment pris)
  45. python:例题求解,不知道怎么等输入完所有数字后再输出
  46. 用python来实现:根据实际查询结果补充完整数据
  47. Mise en œuvre en python: compléter les données complètes en fonction des résultats réels de la requête
  48. python对excel进行分组但不进行聚合统计操作,且输出到不同的表格中?
  49. Python regroupe Excel, mais n'effectue pas de statistiques agrégées, et l'affiche dans différents tableaux.
  50. python如何提交,不要用太复杂的函数
  51. Comment soumettre Python sans utiliser de fonctions trop complexes
  52. Python,数据文件操作问题,想要代码
  53. python 提取多个字符串中的多个字段
  54. python 读入用户输入的一组正整数,到-1结束
  55. Python lit un ensemble d'entiers positifs entrés par l'utilisateur, se terminant par - 1
  56. 测试逐飞的MM32F3277 MicroPython开发板的基本功能
  57. Python timer reference
  58. 关于#python#的问题:python3队列维护
  59. Developing Hongmeng equipment program using python (3-prototype of security system)
  60. Questions sur # # Python #: maintenance de la file d'attente Python 3