【雕爷学编程】MicroPython手册之 哥伦布 (STM32F407) 使用参考

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
哥伦布(Columbus)是指STMicroelectronics推出的一款微控制器系列,其中STM32F407是该系列中的一款型号。下面是关于STM32F407微控制器的详细技术参数:

1、核心处理器:
ARM Cortex-M4核心,具有单周期乘法和硬件除法指令支持。
最高频率可达168 MHz,提供快速的计算和执行能力。
2、存储和存储器:
1 MB的Flash存储器,用于程序代码的存储。
192 KB的SRAM,用于数据存储和变量缓存。
可选的外部存储器接口(如SD卡、NAND闪存等)。
3、外设:
多个通用输入/输出引脚(GPIO):用于连接外部设备和传感器。
多个串行通信接口:包括USART、SPI和I2C等,用于与其他设备进行通信。
USB接口:用于连接外部设备,如计算机或其他USB设备。
定时器和计数器:包括通用定时器、高级定时器和基本定时器,用于定时和计数操作。
模数转换器(ADC):用于模拟信号的采样和转换。
数字模拟转换器(DAC):用于数字信号的模拟输出。
PWM输出:用于产生脉冲宽度调制信号,控制电机和其他执行器。
外部中断:用于检测和响应外部触发事件。
4、电源和时钟:
工作电压范围:通常为1.8V至3.6V,具体型号可能有所不同。
内部时钟源:包括高精度内部振荡器(HSI)和外部晶体振荡器(HSE)。
低功耗模式:支持多种低功耗模式,以延长电池寿命或降低功耗。
5、封装和引脚:
可用的封装类型:LQFP、LFBGA等。
引脚数量和配置:具体取决于型号和封装类型。
6、开发支持:
提供开发工具链和集成开发环境(IDE),如Keil MDK、IAR Embedded Workbench等。
支持多种编程语言,如C和汇编语言。
提供丰富的开发文档、参考手册和示例代码。

需要注意的是,以上列出的技术参数是一般性的描述,具体的技术参数可能因具体的STM32F407型号和封装类型而有所不同。对于特定型号和应用场景,建议查阅STMicroelectronics官方文档和相关资料以获取准确和详尽的技术参数。

在这里插入图片描述
电原理图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

哥伦布(STM32F407)是一款基于MicroPython的开发板,它采用了STM32F407微控制器。下面我将以教师的视角为您详细解释哥伦布的主要特点、应用场景以及需要注意的事项。

主要特点:

强大的处理能力:哥伦布使用STM32F407微控制器,该微控制器采用ARM Cortex-M4内核,主频达到168MHz,具备较高的计算和处理能力。这使得哥伦布能够处理复杂的任务和算法,适用于对性能要求较高的应用。

丰富的硬件接口:哥伦布提供了丰富的硬件接口,包括数字输入输出口(GPIO)、模拟输入输出口(ADC/DAC)、通信接口(UART、SPI、I2C)、定时器等。这些接口可以与各种外部设备进行连接和通信,实现数据采集、控制和通讯等功能。

支持MicroPython生态系统:哥伦布采用MicroPython作为开发语言,MicroPython是一种精简的Python解释器,适用于嵌入式系统。开发者可以使用Python语言进行快速开发,并利用MicroPython的丰富的库和生态系统,方便地使用各种功能模块和工具。

应用场景:

物联网应用:哥伦布适用于物联网应用的开发。借助其强大的处理能力和丰富的硬件接口,可以连接和控制各种传感器、执行器和通信模块,实现智能家居、智能农业、智能城市等物联网应用。

嵌入式系统开发:由于哥伦布采用了STM32F407微控制器,支持的硬件接口丰富,适用于嵌入式系统的开发。可以用于开发嵌入式设备、自动化控制系统、机器人等领域。

教育和学习:哥伦布是一款适合教育和学习的开发板。使用MicroPython作为开发语言,学生和教师可以使用简单易懂的Python语法进行编程,并通过哥伦布的硬件接口实践各种实验和项目。

需要注意的事项:

学习曲线:尽管哥伦布使用了MicroPython作为开发语言,但对于初学者来说,仍然需要一定的学习曲线。开发者需要掌握Python语言的基础知识,并学习如何利用MicroPython进行嵌入式开发。

硬件资源管理:哥伦布的硬件资源有限,开发者需要合理管理和分配硬件资源,以确保系统的稳定性和性能。

电源管理:哥伦布的电源管理是开发过程中需要注意的重要方面。开发者需要合理管理电源,避免过度消耗电量或电源不足导致的问题。

综上所述,MicroPython的哥伦布(STM32F407)开发板具有强大的处理能力、丰富的硬件接口、支持MicroPython生态系统等特点。它适用于物联网应用、嵌入式系统开发以及教育和学习等场景。在使用时需要注意学习曲线、硬件资源管理和电源管理等事项。

案例1:使用MicroPython控制LED灯

from machine import Pin
import time

# 定义LED灯连接的引脚
led_pin = Pin(2, Pin.OUT)

while True:
    # 点亮LED灯
    led_pin.on()
    time.sleep(1)  # 等待1秒

    # 熄灭LED灯
    led_pin.off()
    time.sleep(1)  # 等待1秒

要点解读:这个程序使用了MicroPython的machine模块来控制GPIO(通用输入输出)引脚,通过设置Pin对象的mode属性为Pin.OUT,将引脚设置为输出模式。然后在一个无限循环中,通过调用Pin对象的on()和off()方法来控制LED灯的亮灭。每次亮灭之间有1秒的延时。

案例2:使用MicroPython读取DHT11温湿度传感器数据

import machine
import dht

# 定义DHT11传感器连接的引脚
dht_pin = machine.Pin(4, machine.Pin.IN)

# 初始化DHT11传感器
dht_sensor = dht.DHT11(dht_pin)

while True:
    # 读取温湿度数据
    humidity, temperature = dht_sensor.read()

    # 如果读取成功,打印温湿度数据
    if humidity is not None and temperature is not None:
        print("温度:{:.1f}℃,湿度:{:.1f}%".format(temperature, humidity))
    else:
        print("无法读取数据")

    # 每隔5秒读取一次数据
    time.sleep(5)

要点解读:这个程序使用了MicroPython的machine模块来控制GPIO引脚,以及dht模块来读取DHT11温湿度传感器的数据。首先,定义了DHT11传感器连接的引脚,并初始化传感器。然后,在一个无限循环中,通过调用dht_sensor.read()方法来读取温湿度数据。如果读取成功,打印温湿度数据;否则,打印无法读取数据。最后,每隔5秒读取一次数据。

案例3:PWM控制:
在这个例子中,我们将使用STM32的定时器功能来生成PWM信号。这个信号可以用来控制诸如LED亮度、电机速度等。

from machine import Pin  
import time  
  
# 设置PWM的频率和占空比  
def set_pwm(pin, freq, duty):  
    pin(Pin.OPENDRAIN)  
    ch =machine.Timer(0)  
    ch.init(period=1000000/freq, mode=machine.Timer.PWM, callback=lambda t: pin(1 if duty else 0))  
  
# 在GPIO Pin上启动PWM  
set_pwm(Pin('P1'), freq=500, duty=50)  
  
while True:  
    print("Duty cycle: %d%%" % (50))  
    time.sleep(1)

要点解读:此代码使用了STM32的定时器通道来生成PWM信号。在此,我们使用的是定时器0,它是一个16位的定时器。我们通过设置定时器的周期以及占空比,可以精确地控制PWM的频率和占空比。

案例4:ADC读取:
STM32F407内置了12位的ADC,可以用来读取模拟信号。例如,我们可以读取一个连接到GPIO的模拟传感器的电压。

import machine  
import time  
  
# 初始化ADC并设置参考电压为Vref=3.3V  
adc = machine.ADC(0)  
adc.vref(3300)  
  
while True:  
    # 读取GPIO的电压,并打印出来  
    print("ADC value: %d" % adc(0))  
    time.sleep(1)

要点解读:此代码初始化了STM32的ADC模块,并设置了参考电压为3.3V。然后,我们通过读取GPIO引脚的电压,可以得到该引脚的模拟电压值。注意,ADC读取的值是一个12位的整数,范围为0-4095,对应于0-3.3V的电压范围。

案例5:使用SPI进行通信:
STM32F407有一个SPI模块,可以用来与外部的SPI设备进行通信。例如,我们可以通过SPI与一个SD卡模块进行通信。

import machine  
import sdcard  
import time  
  
spi = machine.SPI(1)  # 使用SPI1模块  
spi.init()  # 初始化SPI模块  
  
# 初始化SD卡模块,连接到SPI1的NSS, SCK, MOSI和MISO引脚上  
sd = sdcard.SDCard(spi, machine.Pin('P2'))  # P2为SD卡的片选引脚  
  
while True:  
    try:  
        # 从SD卡读取一个文件的内容,并打印出来  
        with open('test.txt', 'r') as f:  
            print(f.read())  
        time.sleep(1)  
    except Exception as e:  
        print(e)

要点解读:此代码首先初始化了STM32的SPI模块,并连接到了SD卡模块。然后,我们通过打开SD卡上的一个文件,读取文件内容,并打印出来。如果读取过程中出现任何错误,我们会捕获这个异常并打印出来。注意,在实际应用中,可能需要更复杂的错误处理和数据传输机制。

案例6:LED闪烁:

import machine
import time

led = machine.Pin(13, machine.Pin.OUT)

while True:
    led.on()
    time.sleep(1)
    led.off()
    time.sleep(1)

要点解读:
该代码使用MicroPython控制STM32F407上的GPIO引脚,将引脚13配置为输出模式。
通过循环,交替将LED引脚置为高电平(点亮LED)和低电平(熄灭LED),每个状态持续1秒。
这个简单的示例演示了如何使用MicroPython控制外部设备,实现LED的闪烁效果。

案例7:按钮中断:

import machine

button = machine.Pin(2, machine.Pin.IN, machine.Pin.PULL_UP)
led = machine.Pin(13, machine.Pin.OUT)

def button_interrupt_handler(pin):
    led.value(not led.value())

button.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_interrupt_handler)

while True:
    pass

要点解读:
该代码通过MicroPython配置STM32F407上的GPIO引脚,将引脚2配置为输入模式,并启用上拉电阻。
定义了一个按钮中断处理函数button_interrupt_handler,当引脚2检测到下降沿(按钮按下)时,将调用该函数。
将中断触发方式设置为下降沿(按钮按下),并将中断处理函数指定为button_interrupt_handler。
在主循环中,使用空操作pass来保持程序运行,等待按钮中断的触发。
当按钮被按下时,中断触发,调用button_interrupt_handler函数,该函数会切换LED的状态。

案例8:PWM控制舵机:

import machine

servo = machine.PWM(machine.Pin(5))
servo.freq(50)

def set_angle(angle):
    duty = int((angle / 180) * 1024 + 41)
    servo.duty(duty)

while True:
    set_angle(0)
    machine.delay(1000)
    set_angle(90)
    machine.delay(1000)
    set_angle(180)
    machine.delay(1000)

要点解读:
该代码使用MicroPython控制STM32F407上的PWM功能,通过引脚5控制舵机。
配置PWM的频率为50Hz,通常用于舵机控制。
定义了一个set_angle函数,用于设置舵机的角度。根据角度计算占空比,并通过servo.duty方法设置PWM的占空比。
在主循环中,交替设置舵机的角度为0度、90度和180度,并延迟1秒。
这个示例演示了如何使用MicroPython控制PWM输出,实现舵机的角度控制。
这些示例代码展示了MicroPython在哥伦布(STM32F407)上的实际运用。第一个示例演示了如何控制LED的闪烁,第二个示例展示了如何使用按钮中断来切换LED的状态,第三个示例展示了如何通过PWM控制舵机的角度。这些示例代码可以为初学者提供了解MicroPython在嵌入式系统上的基本用法和应用的参考。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。需要正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。对于涉及到硬件操作的代码,请确保在使用之前充分了解和确认所使用的引脚和电平等参数的正确性和安全性。

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值