[STM32F4] Micropython STM32F4入门点灯

[复制链接]
920|21
 楼主| 慢醇 发表于 2023-10-18 15:31 | 显示全部楼层 |阅读模式
本例程基于STM32F4DISC,主控芯片STM32F407VGT6
71775652f89b23baf2.png
86020652f89c5de593.png
 楼主| 慢醇 发表于 2023-10-18 15:32 | 显示全部楼层
 楼主| 慢醇 发表于 2023-10-18 15:32 | 显示全部楼层
 楼主| 慢醇 发表于 2023-10-18 15:32 | 显示全部楼层
 楼主| 慢醇 发表于 2023-10-18 15:33 | 显示全部楼层
注意事项
81502652f8a4aeadb3.png
 楼主| 慢醇 发表于 2023-10-18 15:33 | 显示全部楼层
引入模块说明
from pyb import LED:引入pyb模块中的子模块LED
import time: 为例了调用sleep sleep_ms sleep_us延时函数
 楼主| 慢醇 发表于 2023-10-18 15:34 | 显示全部楼层
模块内API函数查看方法
69245652f8a6c2529f.png
 楼主| 慢醇 发表于 2023-10-18 15:34 | 显示全部楼层
 楼主| 慢醇 发表于 2023-10-18 15:34 | 显示全部楼层
具体函数说明以及使用可以参考官方文档对应的模块说明:https://docs.micropython.org/en/latest/library/pyb.LED.html#pyb-led
 楼主| 慢醇 发表于 2023-10-18 15:35 | 显示全部楼层
点灯程序代码
点灯示例1:
  1. '''
  2. STM32F4DISC开发板引脚映射关系
  3.   1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
  4. LED_GREEN   PD12
  5. LED_ORANGE  PD13
  6. LED_RED     PD14
  7. LED_BLUE    PD15

  8. '''

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

  11. led = LED(1) # 1=红, 2=绿, 3=黄, 4=蓝
  12. led2 = LED(2)
  13. led3 = LED(3)
  14. led4 = LED(4)

  15. while True:
  16.    
  17.     led.toggle()   
  18.     led2.toggle()
  19.     led3.toggle()
  20.     led4.toggle()
  21.     time.sleep(1)
  22. #    led.on()
  23. #    led.off()

 楼主| 慢醇 发表于 2023-10-18 15:35 | 显示全部楼层
点灯示例2:(没有用延时函数,查询方式)
  1. '''
  2. 1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
  3. LED_GREEN   PD12
  4. LED_ORANGE  PD13
  5. LED_RED     PD14
  6. LED_BLUE    PD15

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

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

  15. if __name__ == '__main__':
  16.     while True:              
  17.         current_time = pyb.millis()
  18.             # 检查是否达到了延时时间
  19.         if current_time - start_time >= delay_time:
  20.             led.toggle()
  21.             start_time = current_time
 楼主| 慢醇 发表于 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
 楼主| 慢醇 发表于 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
 楼主| 慢醇 发表于 2023-10-18 15:36 | 显示全部楼层
⚡该例程有bug,在使用STM32F407时,PD13和PD15并不能如预期那样输出PWM。
 楼主| 慢醇 发表于 2023-10-18 15:37 | 显示全部楼层
  1. '''
  2. STM32F4DISC开发板引脚映射关系
  3. 1=red(PD14), 2=green(PD12), 3=yellow(PD13), 4=blue(PD15)
  4. LED_GREEN   PD12
  5. LED_ORANGE  PD13
  6. LED_RED     PD14
  7. LED_BLUE    PD15
  8. # LEDs 3 and 4 support PWM intensity (0-255)
  9. '''

  10. from pyb import LED
  11. import time # 调用sleep sleep_ms sleep_us延时函数
  12. led3_pwm = LED(3)        # PD13
  13. led4_pwm = LED(4)        # PD15
  14. print('Hello World')
  15. if __name__ == '__main__':   
  16.     while True:
  17.         
  18.         for i in range(0,255,5):        # 0 - 254 步长5
  19.             led3_pwm.intensity(i)
  20.             led4_pwm.intensity(255-i)           
  21.             time.sleep_ms(50)            
  22. #            print('value1=%d' % led3_pwm.intensity())
  23. #            print('value2=%d' % led4_pwm.intensity())
  24.             print('i= {0} ,led3_value={1},led4_value={2}' .format(i,led3_pwm.intensity(),led4_pwm.intensity()))
  25.         else:
  26.             
  27.             print("Finally finished!")

 楼主| 慢醇 发表于 2023-10-18 15:37 | 显示全部楼层
其他模块,任意引脚输出
  1. '''
  2. STM32F4DISC开发板引脚映射关系
  3. 1=red, 2=green, 3=yellow, 4=blue
  4. LED_GREEN   PD12
  5. LED_ORANGE  PD13
  6. LED_RED     PD14
  7. LED_BLUE    PD15

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

  12. if __name__ == '__main__':   
  13.     while True:
  14.         
  15.         p_out.high()
  16.         time.sleep_ms(500)
  17.         p_out.low()
  18.         time.sleep_ms(500)

 楼主| 慢醇 发表于 2023-10-18 15:37 | 显示全部楼层
引入from machine import Pin模块
  1. '''
  2. STM32F4DISC开发板引脚映射关系
  3. 1=red, 2=green, 3=yellow, 4=blue
  4. LED_GREEN   PD12
  5. LED_ORANGE  PD13
  6. LED_RED     PD14
  7. LED_BLUE    PD15

  8. '''

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

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


  18. if __name__ == '__main__':
  19.     while True:
  20.            
  21.         led_toggle()
 楼主| 慢醇 发表于 2023-10-18 15:38 | 显示全部楼层
toggle翻转实现
  1. from pyb import Pin
  2. import time # 调用sleep sleep_ms sleep_us延时函数
  3. p_out = Pin('D12', Pin.OUT_PP)

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

 楼主| 慢醇 发表于 2023-10-18 15:38 | 显示全部楼层
利用time.ticks_ms()函数实现
  1. '''
  2. STM32F4DISC开发板引脚映射关系
  3. 1=red, 2=green, 3=yellow, 4=blue
  4. LED_GREEN   PD12
  5. LED_ORANGE  PD13
  6. LED_RED     PD14
  7. LED_BLUE    PD15

  8. '''

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

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

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

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

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

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

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

  28.         # 更新开始时间
  29.         start_time = current_time

Jacquetry 发表于 2023-10-18 19:41 | 显示全部楼层
Micropython跟python区别大吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

1382

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部