打印
[STM32F4]

Micropython STM32F4入门点灯

[复制链接]
416|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
慢醇|  楼主 | 2023-10-18 15:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本例程基于STM32F4DISC,主控芯片STM32F407VGT6

71775652f89b23baf2.png (50.88 KB )

71775652f89b23baf2.png

86020652f89c5de593.png (38.69 KB )

86020652f89c5de593.png

使用特权

评论回复
沙发
慢醇|  楼主 | 2023-10-18 15:32 | 只看该作者

42467652f89fbab590.png (63.92 KB )

42467652f89fbab590.png

使用特权

评论回复
板凳
慢醇|  楼主 | 2023-10-18 15:32 | 只看该作者

使用特权

评论回复
地板
慢醇|  楼主 | 2023-10-18 15:32 | 只看该作者

使用特权

评论回复
5
慢醇|  楼主 | 2023-10-18 15:33 | 只看该作者
注意事项

81502652f8a4aeadb3.png (60.53 KB )

81502652f8a4aeadb3.png

使用特权

评论回复
6
慢醇|  楼主 | 2023-10-18 15:33 | 只看该作者
引入模块说明
from pyb import LED:引入pyb模块中的子模块LED
import time: 为例了调用sleep sleep_ms sleep_us延时函数

使用特权

评论回复
7
慢醇|  楼主 | 2023-10-18 15:34 | 只看该作者
模块内API函数查看方法

69245652f8a6c2529f.png (56.92 KB )

69245652f8a6c2529f.png

使用特权

评论回复
8
慢醇|  楼主 | 2023-10-18 15:34 | 只看该作者

使用特权

评论回复
9
慢醇|  楼主 | 2023-10-18 15:34 | 只看该作者
具体函数说明以及使用可以参考官方文档对应的模块说明:https://docs.micropython.org/en/latest/library/pyb.LED.html#pyb-led

使用特权

评论回复
10
慢醇|  楼主 | 2023-10-18 15:35 | 只看该作者
点灯程序代码
点灯示例1:
'''
STM32F4DISC开发板引脚映射关系
  1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15

'''

from pyb import LED
import time # 调用sleep sleep_ms sleep_us延时函数

led = LED(1) # 1=红, 2=绿, 3=黄, 4=蓝
led2 = LED(2)
led3 = LED(3)
led4 = LED(4)

while True:
   
    led.toggle()   
    led2.toggle()
    led3.toggle()
    led4.toggle()
    time.sleep(1)
#    led.on()
#    led.off()

使用特权

评论回复
11
慢醇|  楼主 | 2023-10-18 15:35 | 只看该作者
点灯示例2:(没有用延时函数,查询方式)
'''
1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15

'''
import pyb
from pyb import LED
led = LED(1) # 1=红, 2=绿, 3=黄, 4=蓝
# 设置延时时间为1000毫秒
delay_time = 1000

# 获取当前的毫秒数
start_time = pyb.millis()

if __name__ == '__main__':
    while True:              
        current_time = pyb.millis()
            # 检查是否达到了延时时间
        if current_time - start_time >= delay_time:
            led.toggle()
            start_time = current_time

使用特权

评论回复
12
慢醇|  楼主 | 2023-10-18 15:36 | 只看该作者
'''
1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15

'''
import pyb
from pyb import LED
led = LED(1) # 1=红, 2=绿, 3=黄, 4=蓝
# 设置延时时间为1000毫秒
delay_time = 1000

# 获取当前的毫秒数
start_time = pyb.millis()

if __name__ == '__main__':
    while True:              
        current_time = pyb.millis()
            # 检查是否达到了延时时间
        if current_time - start_time >= delay_time:
            led.toggle()
            start_time = current_time

使用特权

评论回复
13
慢醇|  楼主 | 2023-10-18 15:36 | 只看该作者
LED模块例程三[color=rgba(0, 0, 0, 0.75)]

[color=rgba(0, 0, 0, 0.75)]参考文档:https://docs.micropython.org/en/latest/pyboard/quickref.html#internal-leds

使用特权

评论回复
14
慢醇|  楼主 | 2023-10-18 15:36 | 只看该作者
⚡该例程有bug,在使用STM32F407时,PD13和PD15并不能如预期那样输出PWM。

使用特权

评论回复
15
慢醇|  楼主 | 2023-10-18 15:37 | 只看该作者
'''
STM32F4DISC开发板引脚映射关系
1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15
# LEDs 3 and 4 support PWM intensity (0-255)
'''

from pyb import LED
import time # 调用sleep sleep_ms sleep_us延时函数
led3_pwm = LED(3)        # PD13
led4_pwm = LED(4)        # PD15
print('Hello World')
if __name__ == '__main__':   
    while True:
        
        for i in range(0,255,5):        # 0 - 254 步长5
            led3_pwm.intensity(i)
            led4_pwm.intensity(255-i)           
            time.sleep_ms(50)            
#            print('value1=%d' % led3_pwm.intensity())
#            print('value2=%d' % led4_pwm.intensity())
            print('i= {0} ,led3_value={1},led4_value={2}' .format(i,led3_pwm.intensity(),led4_pwm.intensity()))
        else:
            
            print("Finally finished!")

使用特权

评论回复
16
慢醇|  楼主 | 2023-10-18 15:37 | 只看该作者
其他模块,任意引脚输出
'''
STM32F4DISC开发板引脚映射关系
1=red, 2=green, 3=yellow, 4=blue
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15

'''
from pyb import Pin
import time # 调用sleep sleep_ms sleep_us延时函数
p_out = Pin('D12', Pin.OUT_PP)

if __name__ == '__main__':   
    while True:
        
        p_out.high()
        time.sleep_ms(500)
        p_out.low()
        time.sleep_ms(500)

使用特权

评论回复
17
慢醇|  楼主 | 2023-10-18 15:37 | 只看该作者
引入from machine import Pin模块
'''
STM32F4DISC开发板引脚映射关系
1=red, 2=green, 3=yellow, 4=blue
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15

'''

from machine import Pin
import time # 调用sleep sleep_ms sleep_us延时函数

LED_Pin = Pin('C10', Pin.OUT_PP)  #PC10设置为推挽输出
def led_toggle():
     
     LED_Pin.value(0)      #设为低电平
     time.sleep(0.5)
     LED_Pin.value(1)      #设为高电平
     time.sleep(0.5)


if __name__ == '__main__':
    while True:
           
        led_toggle()

使用特权

评论回复
18
慢醇|  楼主 | 2023-10-18 15:38 | 只看该作者
toggle翻转实现
from pyb import Pin
import time # 调用sleep sleep_ms sleep_us延时函数
p_out = Pin('D12', Pin.OUT_PP)

if __name__ == '__main__':   
    while True:
        
#        p_out.value(p_out.value()^1 ) # 状态取反
        p_out.value(not p_out.value())        # 状态取反,同上
        time.sleep_ms(500)

使用特权

评论回复
19
慢醇|  楼主 | 2023-10-18 15:38 | 只看该作者
利用time.ticks_ms()函数实现
'''
STM32F4DISC开发板引脚映射关系
1=red, 2=green, 3=yellow, 4=blue
LED_GREEN   PD12
LED_ORANGE  PD13
LED_RED     PD14
LED_BLUE    PD15

'''

import machine
from pyb import Pin
import time # 调用sleep sleep_ms sleep_us延时函数

# 设置LED引脚
# led_pin = machine.Pin('A6', machine.Pin.OUT)
led_pin = Pin('A6', Pin.OUT_PP)

# 定义亮灭时间间隔(以毫秒为单位)
interval = 500

# 获取当前的毫秒数
start_time = time.ticks_ms()

while True:
    # 获取当前的毫秒数
    current_time = time.ticks_ms()

    # 计算经过的时间
    elapsed_time = time.ticks_diff(current_time, start_time)

    # 判断是否达到亮灭时间间隔
    if elapsed_time >= interval:
        # 翻转LED状态
        led_pin.value(not led_pin.value())

        # 更新开始时间
        start_time = current_time

使用特权

评论回复
20
Jacquetry| | 2023-10-18 19:41 | 只看该作者
Micropython跟python区别大吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

118

主题

1234

帖子

5

粉丝