1.安装 protoc-gen-go

go get github.com/golang/protobuf/protoc-gen-go

2.下载protoc

https://github.com/google/protobuf/releases

3.编译proto

protoc --proto_path=./proto --go_out=../go/ *.proto

4.使用方式

package main

import (
    "reflect"
    "yqmiot"

    proto "github.com/golang/protobuf/proto"
)

func main() {
    // 根据具体类型编码
    loginreq := yqmiot.LoginReq{}
    loginreq.Uid = proto.String("wameidemao")
    loginreq.Password = proto.String("woyouyizhixiaomaolv")
    data, _ := proto.Marshal(&loginreq)

    // 根据具体类型解码
    _ = proto.Unmarshal(data, &loginreq)

    // 根据类型名称解码
    messname := "yqmiot.LoginReq"
    messtype := proto.MessageType(messname).Elem() // 获取注册类型
    mess := reflect.New(messtype).Interface().(proto.Message)
    _ = proto.Unmarshal(data, mess)
}

开启 tim 会立即进入中断

在开启 tim 前清理一下 TIM_FLAG_UPDATE 标记就可以解决立即进中断的问题

__HAL_TIM_CLEAR_FLAG(&htim17, TIM_FLAG_UPDATE);
HAL_TIM_Base_Start_IT(&htim17);

参考资料:
https://blog.csdn.net/Robotzzg/article/details/90712340

ARPE 标记的意思

启用这个标记后,写入ARR寄存器的值会被暂存,直到 TIM_FLAG_UPDATE 事件触发后真正写入。

参考资料:
https://blog.csdn.net/wowo004/article/details/100582953

单发模式

在初始化 tim 后可以追加单发模式初始化,单发模式,触发一次update则自动停止
HAL_TIM_Base_Init(&htim17)
HAL_TIM_OnePulse_Init(&htim17, TIM_OPMODE_SINGLE)