STM32笔记--低功耗与RTC唤醒


硬件平台: STM32L051

 void system_stop(void) 
{ 
    __HAL_RCC_AHB_FORCE_RESET(); 
    __HAL_RCC_APB1_FORCE_RESET(); 
    __HAL_RCC_APB2_FORCE_RESET(); 
    __HAL_RCC_PWR_CLK_ENABLE();             
    HAL_PWR_EnableBkUpAccess();     
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); 
    __HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);   
    __HAL_RTC_WAKEUPTIMER_DISABLE_IT(&hrtc,RTC_IT_WUT);
    __HAL_RTC_TIMESTAMP_DISABLE_IT(&hrtc,RTC_IT_TS);
    __HAL_RTC_ALARM_CLEAR_FLAG(&hrtc,RTC_FLAG_ALRAF | RTC_FLAG_ALRBF); 
    __HAL_RTC_TIMESTAMP_CLEAR_FLAG(&hrtc,RTC_FLAG_TSF); 
    __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc,RTC_FLAG_WUTF); 
    __HAL_RCC_BACKUPRESET_RELEASE();                   
    __HAL_RTC_WRITEPROTECTION_ENABLE(&hrtc);   
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);  
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); 
}

- 阅读全文 -

MaixGo应用笔记


开箱验证:
板子出厂前都预装了maixpy系统,用USB TypeC线直接连接开发板与电脑,电脑会显示USB转串口设备。
Linux系统会显示ttyUSB0和ttyUSB1两个设备,经测试ttyUSB1为终端。
通过串口测试软件打开串口,参数: 115200-N-8-1
复位开发板显示如下:

[MAIXPY]Pll0:freq:832000000
[MAIXPY]Pll1:freq:398666666
[MAIXPY]Pll2:freq:45066666
[MAIXPY]cpu:freq:416000000
[MAIXPY]kpu:freq:398666666
[MAIXPY]Flash:0xc8:0x17
open second core...
gc heap=0x802f7b80-0x80377b80(524288)
[MaixPy] init end

 __  __              _____  __   __  _____   __     __
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ /
| |\/| |   / /\ \     | |     > <   |  ___/    \   /
| |  | |  / ____ \   _| |_   / . \  | |         | |
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|

Official Site : https://www.sipeed.com
Wiki          : https://maixpy.sipeed.com

MicroPython v0.5.0-221-g6460c58 on 2020-09-19; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> 

点亮LED:

>>> fm.register(board_info.LED_R, fm.fpioa.GPIO0)
1
>>> led_r=GPIO(GPIO.GPIO0, GPIO.OUT)
>>> led_r.value(0)
>>> led_r.value(1)

MaixPy IDE应用
打开MaixPy IDE
工具-->选择开发板-->Sipeed Maix Go
新建一个脚本文件:

import time
# 绑定LED_B(蓝灯)至GPIO0
fm.register(board_info.LED_B, fm.fpioa.GPIO0)
# 设置端口为输出
led_b=GPIO(GPIO.GPIO0, GPIO.OUT)

while(True):
    # 低电平点亮LED
    led_b.value(0)
    time.sleep_ms(200)
    # 高电平熄灭LED
    led_b.value(1)
    time.sleep_ms(200)
    print("Hello World")

工具-->打开终端-->在编辑器中运行该脚本。


重新烧写镜像:
下载kflash工具

$ sudo pip3 install kflash

如果未安装pip工具则需要先安装pip工具:

$ sudo apt-get install python3-pip

烧写镜像

$ sudo kflash -p /dev/ttyUSB1 -b 1500000 -B goE maixpy_v0.5.0.bin

-p 指定设备
-b 指定波特率,默认为115200太慢了,可将速度设置快一些。
-B 指定文件格式


maixpy论坛:maixpy学习文档及交流
maixhub模型平台:常用的计算模型下载

- 阅读全文 -

AI视觉处理--基于C++的OpenCV应用


安装C++链接库

$ sudo apt-get install libopencv-dev

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>  
#include <iostream>             
#include <opencv2/opencv.hpp>   // OpenCV's C++
using namespace cv;
using namespace std;

const int DEFAULT_CAMERA_WIDTH  = 640;
const int DEFAULT_CAMERA_HEIGHT = 480;
const char *windowName = "Cartoonifier";   

int main(int argc, char *argv[])
{
    VideoCapture camera;    
    Mat camera_frame;
    Mat disp_frame; 

    // 打开摄像机
    try {
        camera.open(0);
    } catch (cv::Exception &e) {}

    if ( !camera.isOpened() ) {
        cerr << "ERROR: Could not access the camera !" << endl;
        exit(1);
    }

    // 设置摄像机分辨率
    camera.set(CAP_PROP_FRAME_WIDTH,  DEFAULT_CAMERA_WIDTH);
    camera.set(CAP_PROP_FRAME_HEIGHT, DEFAULT_CAMERA_HEIGHT);

    // 设置GUI显示窗口
    namedWindow(windowName); 
   
    while (true) {
        // 从摄像机读取一帧数据       
        camera >> camera_frame;
        if( camera_frame.empty() ) {
            cerr << "ERROR: Could not grab the next camera frame." << endl;
            exit(1);
        }
       
        // 反转图像: 1 - 左右, 0 - 上下, -1 - 上下左右
        flip(camera_frame,disp_frame, 1);
        // 显示图像
        imshow(windowName, disp_frame);
        // 必须调用waitKey才能刷新图像
        int keypress = waitKey(20);     
        if (keypress == 27) { 
            break;
        }
    }//end while

    return 0;
}

编译选项:

-lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_videoio       

将彩色图像转换线条画:

Mat gray;
Mat edges;
Mat mask;

// 彩色转灰度(输入,输出,模式)
cvtColor(disp_frame, gray, COLOR_BGR2GRAY);    
// 模糊处理(生成线条比较纯净)
medianBlur(gray,mask,7);  
// 生成线条画(输入,输出,参数)                       
Laplacian(mask, edges, CV_8U,5);    
// 参数3表示阈值               
threshold(edges, disp_frame, 80, 255, THRESH_BINARY_INV);

图像缩放:

Size size;
size.width  = 160;
size.height = 120;
Mat img = Mat(size,CV_8UC3);
resize(gray,img,size,0,0,INTER_LINEAR);

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com