首页 > 其他分享 >基于STM32精英开发板智能除雪除冰履带车项目

基于STM32精英开发板智能除雪除冰履带车项目

时间:2022-12-11 22:02:53浏览次数:44  
标签:Pin 开发板 STM32 TIM InitStructure LOW GPIO 除冰 define

基于STM32精英开发板智能除雪除冰履带车项目_初始化



main.c
#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "motor.h"

#include "remote.h"



int main(void)

{
u8 key;

u8 t=0;

u8 i=1;

u8 *str=0;


delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级

uart_init(115200); //串口初始化为115200



TIM3_PWM_Init(450,7199); //PWM输出初始化

TIM2_PWM_Init(450,7199); //PWM输出初始化

TIM5_PWM_Init(450,7199); //PWM输出初始化


Remote_Init(); //红外接收初始化






while(1)

{

key = 0;

key=Remote_Scan();
if(key)

{

str = 0;

switch(key)

{

/*

case 0:str="ERROR";break;

case 162:str="POWER";break;
case 98:str="UP";break; //前进键

case 2:str="PLAY";break;
case 226:str="ALIENTEK";break;

case 194:str="RIGHT";break; //右

case 34:str="LEFT";break; //左
case 224:str="VOL-";break;

case 168:str="DOWN";break; //后退键

case 144:str="VOL+";break;

case 104:str="1";break;

case 152:str="2";break;

case 176:str="3";break;
case 48:str="4";break;

case 24:str="5";break;

case 122:str="6";break;

case 16:str="7";break;
case 56:str="8";break;

case 90:str="9";break;

case 66:str="0";break;

case 82:str="DELETE";break;
*/

case 98:

motor_forward();

delay_ms(50);

break;

case 168:

motor_down();

delay_ms(50);

break; //后退键
case 194:

motor_right();

delay_ms(50);

break;
case 34:

motor_left();

delay_ms(50);

break;
case 104:

PA4_HIGH;

PA8_HIGH;

delay_ms(50);

PA4_LOW;

PA8_LOW;

break;

case 152:

PD11_HIGH;

PD12_HIGH;

delay_ms(50);

PD11_LOW;

PD12_LOW;
break;

case 48:

motor_space();

break;

case 24:

motor_space_right();//右

break;

case 16:

PD13_HIGH;

PD14_HIGH;

delay_ms(50);

PD13_LOW;

PD14_LOW;

break;

case 56:

PE0_HIGH;

PE1_HIGH;

delay_ms(50);

PE0_LOW;

PE1_LOW;

break;
case 176:

PE2_HIGH;

PE3_LOW;

delay_ms(50);

PE2_LOW;

PE3_LOW;

break;

case 122:

PE3_HIGH;

PE2_LOW;

delay_ms(50);

PE2_LOW;

PE3_LOW;

break;

case 66:

PE6_HIGH;

delay_ms(50);

PE6_LOW;

break;

}


motor_stop();


}

else

delay_ms(10);


//P6_HIGH;

//P5_LOW;

//P3_HIGH;

//P2_LOW; //IO测试

//PB10_HIGH;

//PB11_LOW;


}

}
motor.c
#include "motor.h"

#include "usart.h"

#include "delay.h"

//TIM3 PWM部分初始化

//PWM输出初始化

//arr:自动重装载值

//psc 时钟预分频系数

void TIM3_PWM_Init(u16 arr,u16 psc)//tim3,ch2,IOA7

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;



RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE); //使能GPIO外设时钟




//初始化IOPA11

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_11);

//初始化IOPA12

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_12);

//初始化IOPA4,举高电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_4);

//初始化IOPA8,举高电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_8);


//初始化IOPD11,举高电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_ResetBits(GPIOD,GPIO_Pin_11);


//初始化IOPD12,举高电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_ResetBits(GPIOD,GPIO_Pin_12);

//初始化IOPD13,伸出电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_ResetBits(GPIOD,GPIO_Pin_13);

//初始化IOPD14,伸出电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_ResetBits(GPIOD,GPIO_Pin_14);

//初始化IOPE0,伸出电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_ResetBits(GPIOE,GPIO_Pin_0);

//初始化IOPE1,伸出电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_ResetBits(GPIOE,GPIO_Pin_1);

//初始化IOPE2,抬升电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_ResetBits(GPIOE,GPIO_Pin_2);


//初始化IOPE3,抬升电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_ResetBits(GPIOE,GPIO_Pin_3);


//初始化IOPE6,锯冰电机

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);

GPIO_ResetBits(GPIOE,GPIO_Pin_6);

//初始化IOPA7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);




//初始化TIM3

TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频系数

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

//初始化TIM3 Channel 2

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择PWM模式2

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //输出比较极性地

TIM_OC2Init(TIM3, &TIM_OCInitStructure);


TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能定时器3通道2预装载寄存器


TIM_Cmd(TIM3, ENABLE); //使能TIM3


}




void TIM2_PWM_Init(u16 arr, u16 psc)//tim2,ch2,IOA1

{

GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; //定义一个定时中断的结构体
TIM_OCInitTypeDef TIM_OCInitTypeStrue; //定义一个PWM输出的结构体


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟,在STM32中使用IO口前都要 使能对应时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能通用定时器2时钟,A1引脚对应TIM2CHN2




//初始化IOPA5

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_5);

//初始化IOPA6

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_ResetBits(GPIOA,GPIO_Pin_6);



//初始化IOPA1

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);




TIM_TimeBaseInitStrue.TIM_Period=arr; //计数模式为向上计数时,定时器从0开始计数,计数超过到arr时触发定时中断服务函数

TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //预分频系数,决定每一个计数的时长

TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //计数模式:向上计数

TIM_TimeBaseInitStrue.TIM_ClockDivision=0; //一般不使用,默认TIM_CKD_DIV1

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStrue); //根据TIM_TimeBaseInitStrue的参数初始化定时器TIM2


TIM_OCInitTypeStrue.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式1,当定时器计数小于TIM_Pulse时,定时器对应IO输出有效电平

TIM_OCInitTypeStrue.TIM_OCPolarity=TIM_OCNPolarity_High; //输出有效电平为高电平

TIM_OCInitTypeStrue.TIM_OutputState=TIM_OutputState_Enable; //使能PWM输出

TIM_OCInitTypeStrue.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值

TIM_OC2Init(TIM2, &TIM_OCInitTypeStrue); //根TIM_OCInitTypeStrue参数初始化定时器2通道3


TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable); //CH2预装载使能


TIM_ARRPreloadConfig(TIM2, ENABLE); //CH2预装载使能


TIM_Cmd(TIM2, ENABLE); //使能定时器TIM2



}



void TIM5_PWM_Init(u16 arr, u16 psc)//tim5,ch1,IOA0

{

GPIO_InitTypeDef GPIO_InitStructure; //定义一个引脚初始化的结构体

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; //定义一个定时中断的结构体
TIM_OCInitTypeDef TIM_OCInitTypeStrue; //定义一个PWM输出的结构体


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB时钟,在STM32中使用IO口前都要 使能对应时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能通用定时器4时钟




//初始化IOPB10

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_10); //PB.5 输出高

//初始化IOPB11

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_11); //PB.5 输出高


//初始化IOPA0

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);





TIM_TimeBaseInitStrue.TIM_Period=arr; //计数模式为向上计数时,定时器从0开始计数,计数超过到arr时触发定时中断服务函数

TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //预分频系数,决定每一个计数的时长

TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //计数模式:向上计数

TIM_TimeBaseInitStrue.TIM_ClockDivision=0; //一般不使用,默认TIM_CKD_DIV1

TIM_TimeBaseInit(TIM5, &TIM_TimeBaseInitStrue); //根据TIM_TimeBaseInitStrue的参数初始化定时器TIM4


TIM_OCInitTypeStrue.TIM_OCMode=TIM_OCMode_PWM1; //PWM模式1,当定时器计数小于TIM_Pulse时,定时器对应IO输出有效电平

TIM_OCInitTypeStrue.TIM_OCPolarity=TIM_OCNPolarity_High; //输出有效电平为高电平

TIM_OCInitTypeStrue.TIM_OutputState=TIM_OutputState_Enable; //使能PWM输出

TIM_OCInitTypeStrue.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值

TIM_OC1Init(TIM5, &TIM_OCInitTypeStrue); //根TIM_OCInitTypeStrue参数初始化定时器2通道3


TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Disable); //CH1预装载使能


TIM_ARRPreloadConfig(TIM5, ENABLE); //CH1预装载使能


TIM_Cmd(TIM5, ENABLE); //使能定时器TIM5



}





void motor_forward(void)

{

TIM_SetCompare2(TIM3,300);//foward

PA11_HIGH;

PA12_LOW;

TIM_SetCompare2(TIM2,300);//foward

PA6_HIGH;

PA5_LOW;

}

void motor_stop(void)

{


PA11_LOW;

PA12_LOW;


PA6_LOW;

PA5_LOW;

}

void motor_down(void)

{


TIM_SetCompare2(TIM3,300);//foward

PA11_LOW;

PA12_HIGH;

TIM_SetCompare2(TIM2,300);//foward

PA6_LOW;

PA5_HIGH;

}

void motor_left(void)

{


TIM_SetCompare2(TIM3,300);//foward

PA11_LOW;

PA12_HIGH;

TIM_SetCompare2(TIM2,300);//foward

PA6_HIGH;

PA5_LOW;

}

void motor_right(void)//左

{


TIM_SetCompare2(TIM3,300);//foward

PA11_HIGH;

PA12_LOW;

TIM_SetCompare2(TIM2,300);//foward

PA6_LOW;

PA5_HIGH;

}


void motor_space(void)//左

{


TIM_SetCompare1(TIM5,300);//foward

PB10_HIGH;

PB11_LOW;

delay_ms(50);

PB10_LOW;

PB11_LOW;

}

void motor_space_right(void)//左

{


TIM_SetCompare1(TIM5,300);//foward

PB11_HIGH;

PB10_LOW;

delay_ms(50);

PB10_LOW;

PB11_LOW;

}
motor.h
#ifndef __TIMER_H

#define __TIMER_H

#include "sys.h"


#define PA6 GPIO_Pin_6

#define PA5 GPIO_Pin_5

//#define MORTOR_PROT GPIOA


#define PA6_LOW GPIO_ResetBits(GPIOA,PA6)

#define PA6_HIGH GPIO_SetBits(GPIOA,PA6)


#define PA5_LOW GPIO_ResetBits(GPIOA,PA5)

#define PA5_HIGH GPIO_SetBits(GPIOA,PA5)


#define PA11 GPIO_Pin_11

#define PA12 GPIO_Pin_12


#define PA11_LOW GPIO_ResetBits(GPIOA,PA11)

#define PA11_HIGH GPIO_SetBits(GPIOA,PA11)


#define PA12_LOW GPIO_ResetBits(GPIOA,PA12)

#define PA12_HIGH GPIO_SetBits(GPIOA,PA12)



#define PA4 GPIO_Pin_4

#define PA4_LOW GPIO_ResetBits(GPIOA,PA4)

#define PA4_HIGH GPIO_SetBits(GPIOA,PA4)


#define PA8 GPIO_Pin_8

#define PA8_LOW GPIO_ResetBits(GPIOA,PA8)

#define PA8_HIGH GPIO_SetBits(GPIOA,PA8)


#define PD11 GPIO_Pin_11

#define PD11_LOW GPIO_ResetBits(GPIOD,PD11)

#define PD11_HIGH GPIO_SetBits(GPIOD,PD11)


#define PD12 GPIO_Pin_12

#define PD12_LOW GPIO_ResetBits(GPIOD,PD12)

#define PD12_HIGH GPIO_SetBits(GPIOD,PD12)





#define PB10 GPIO_Pin_10

#define PB10_LOW GPIO_ResetBits(GPIOB,PB10)

#define PB10_HIGH GPIO_SetBits(GPIOB,PB10)


#define PB11 GPIO_Pin_11

#define PB11_LOW GPIO_ResetBits(GPIOB,PB11)

#define PB11_HIGH GPIO_SetBits(GPIOB,PB11)


#define PD11 GPIO_Pin_11

#define PD11_LOW GPIO_ResetBits(GPIOD,PD11)

#define PD11_HIGH GPIO_SetBits(GPIOD,PD11)

#define PD12 GPIO_Pin_12

#define PD12_LOW GPIO_ResetBits(GPIOD,PD12)

#define PD12_HIGH GPIO_SetBits(GPIOD,PD12)


#define PD13 GPIO_Pin_13

#define PD13_LOW GPIO_ResetBits(GPIOD,PD13)

#define PD13_HIGH GPIO_SetBits(GPIOD,PD13)

#define PD14 GPIO_Pin_14

#define PD14_LOW GPIO_ResetBits(GPIOD,PD14)

#define PD14_HIGH GPIO_SetBits(GPIOD,PD14)


#define PE0 GPIO_Pin_0

#define PE0_LOW GPIO_ResetBits(GPIOE,PE0)

#define PE0_HIGH GPIO_SetBits(GPIOE,PE0)

#define PE1 GPIO_Pin_1

#define PE1_LOW GPIO_ResetBits(GPIOE,PE1)

#define PE1_HIGH GPIO_SetBits(GPIOE,PE1)


#define PE2 GPIO_Pin_2

#define PE2_LOW GPIO_ResetBits(GPIOE,PE2)

#define PE2_HIGH GPIO_SetBits(GPIOE,PE2)

#define PE3 GPIO_Pin_3

#define PE3_LOW GPIO_ResetBits(GPIOE,PE3)

#define PE3_HIGH GPIO_SetBits(GPIOE,PE3)


#define PE6 GPIO_Pin_6

#define PE6_LOW GPIO_ResetBits(GPIOE,PE6)

#define PE6_HIGH GPIO_SetBits(GPIOE,PE6)



void TIM3_PWM_Init(u16 arr,u16 psc);

void TIM2_PWM_Init(u16 arr,u16 psc);

void TIM5_PWM_Init(u16 arr,u16 psc);

void motor_forward(void);

void motor_stop(void);

void motor_down(void);

void motor_right(void);

void motor_left(void);

void motor_space(void);

void motor_space_right(void);


#endif

标签:Pin,开发板,STM32,TIM,InitStructure,LOW,GPIO,除冰,define
From: https://blog.51cto.com/u_15906483/5928748

相关文章

  • STM32用寄存器实现电平翻转
    代码GPIOx->ODR^=GPIO_Pin_x如果加载了标准库的文件:GPIOx中的x可以为(A,B,C,D……)GPIO_Pin_x中的x可以为(1,2,3……)如果没有加载标准库的文件查找官方手册操......
  • STM32与PS2的无线通信和相关函数介绍
    PS2采用SPI通信协议源码和参考文件获取:https://github.com/Sound-Sleep/PS2_Based_On_STM32接收器接口DI:手柄->主机,时钟的下降沿传送信号,信号的读取在时钟由髙到低......
  • stm32f407VET6 串口(usart1)基本操作,【发送数据 + 接收数据】
    完整代码:#include"stm32f4xx.h"#include"delay.h"#include"led.h"#include"usart.h"/**说明:*串口程序*实现发送任意一个字节数据给电脑*电脑发送00/......
  • stm32——位带操作
     一、位带的简介    位操作就是可以单独的对一个比特位读和写,在stm32单片机中是通过访问位带别名区来实现的。在STM32中,有两个地方实现了位带,一个是SRAM区......
  • STM32单片机的最小系统的组成详解
    经常使用STM32开发的工程师对于它的开发环境的最小系统是必须要有所了解的,特别是硬件工程师在设计硬件的时候对这个最小系统就要更加的深入了解了,如果最小系统的搭建都有问......
  • Linux Hibernate配置以及流程简单分析(@STM32MP157D)
    关键词:1.Hibernate介绍2.Linux下Hibernate配置及操作在内核中使能Hibernation功能:由于Hibernate镜像需要保存在swap文件中,所以在内核中使能swap功能: 由于在hiber......
  • 40、记录ROC-RK3588S-PC开发板目标检测和mpp拉海康摄像头进行解码
    基本思想:喜得一个RK3588开发板,利用它完成目标检测和TCP通信 一、刷机参考官网或者参考下篇博客系统用的:ROC-RK3588S-PC_Ubuntu20.04-Gnome-r21199_v1.0.1b_220812.7z刷机......
  • stm32f407VET6 串口使用 USART1
    第一步、开启时钟,把需要用到的USART1和GPIO的时钟打开第二步、GPIO初始化,把TX配置成复用输出,RX配置成复用输入第三步、配置USART1,直接使用一个结构体第四步、如果只需......
  • itop3588开发板编译Linux源码包-修改成mipi显示
    打开​​Linux​​源码kernel/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4.dtsi中的设备树文件。如下图所示默认包含的头文件即是mipi显示:更多内容可以了解迅为35......
  • itop3568开发板在Linux系统中使用NPU
    下载rknpu2并拷贝虚拟机​​Ubuntu​​,如下图所示,RKNPU2提供了访问rk3568芯片NPU的高级接口。下载地址为“iTOP-3568开发板\02_【iTOP-RK3568开发板】开发资料\11_NPU使......