STM32笔记

STM32F103学习笔记 GPIO初始化和读写操作 STM32的GPIO引脚有多种模式使用,在使用前需要进行配置。 LED灯实验 #include "stm32f10x.h" #define LED GPIO_Pin_All void delay(u32 i) { while(i--); } //LED的GPIO初始化程序 void LED_Init() { GPIO_InitTypeDef GPIO_InitStructure; //GPIO时钟初始化 SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //配置GPIO模式和端口 GPIO_InitStructure.GPIO_Pin = LED; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化GPIO } void led_display() { GPIO_SetBits(GPIOC,LED); delay(6000000); GPIO_ResetBits(GPIOC,LED); delay(6000000); } int main() { LED_Init(); while(1) { led_display(); } } 蜂鸣器实验 使用无源蜂鸣器 #include "stm32f10x.h" #define BZ GPIO_Pin_5 //PB5 定义端口PB5 void delay(u32 i) { while(i--); } void BEEP_Init() { GPIO_InitTypeDef GPIO_InitStructure; //GPIO时钟初始化 SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //配置GPIO模式和端口 GPIO_InitStructure.GPIO_Pin = BZ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化GPIO } void sound(u32 i) // i= 5000救护车,i=1000电动车 { while(i--) { GPIO_SetBits(GPIOB,BZ); delay(i); GPIO_ResetBits(GPIOB,BZ); delay(i); } } int main() { BEEP_Init(); //端口初始化 while(1) { sound(5000); } } SysTick实验 系统滴答计时器比延时函数更加精确,可移植性更高。systick定时器是24位的定时器,当定时器计数到0时,将自动从RELOAD寄存器中重装定时器初值,如果开启了中断,此时还会产生异常中断信号。 ...

2019-05-12 · 8 分钟 · 3645 字 · Niuhe

Virtualbox虚拟机连接雷达和UART串口

目前ROS只支持Linux版,如果不方便装Linux主机,可以通过以太网桥接的方式获得雷达的数据帧;对一些串口传感器,也可以通过Serial to USB,然后在virtualbox里选择对应的USB设备进行调试。 本方法适用于通过以太网/WLAN来传送数据包的雷达。 使用Virtualbox里建立虚拟机,将雷达连接到主机电脑, 设置以太网的IP地址为雷达的目标地址 虚拟机桥接到对应的以太网 在虚拟机中测试收发数据帧 tcpdump

2019-05-06 · 1 分钟 · 203 字 · Niuhe

Matlab 基础

matlba基础和简单用法 ...

2019-05-06 · 2 分钟 · 827 字 · Niuhe

Python3操作二维码图片

python3中如何对二维码QRcode进行编码解码 通常对于二维码,我们需要进行两种操作: 将二维码图片扫描后解析成字符串 将字符串编码生成二维码图片 这是两个逆过程,在python2中,我们可以通过zbar这个第三方库实现两个功能。可以zbar并不支持python3,而且,zbar在window平台上的安装极其繁琐,有很多坑。 ...

2019-04-27 · 3 分钟 · 1014 字 · Niuhe

Linux进程——进程创建和同步控制

Linux内核支持用户进程和内核进程两种进程。内核进程指完全运行在内核空间的进程,这种进程主要处理内核事务;用户进程一般运行在用户态,需要使用内核资源时,通过系统调用进入内核态,系统调用结束后,重新返回用户态。 ###创建进程 可通过fork函数创建子进程,理论上,父子进程拥有各自独立的用户空间。但Linux为了提高效率,采用COW(copy on write)算法。 ...

2018-10-09 · 4 分钟 · 1919 字 · Niuhe

Linux进程——进程环境与加载可执行映像

进程是程序的一次运行过程,除了进程虚拟地址空间和文件描述符等,进程控制块中还存放了进程运行的环境信息,包括用户、用户组、父进程、进程组和会话等。 ###用户和用户组 //获得当前进程实际用户ID pid_t getuid(void); //获得当前进程有效用户ID pid_t geteuid(void); //获得当前进程实际用户组ID pid_t getgid(void); //获得当前进程有效用户组ID pid_t getegid(void); ###进程和进程组 获得父子进程ID //获得当前进程ID pid_t getpid(void); //获得父进程ID pid_t getppid(void); 进程组 有时,为了完成某个工作,需多个进程参与协作,为便于管理,可以将多个进程定义为一个进程组。一个进程组包含一个以上的进程,领头进程的进程ID等于进程组ID,进程组中不包含进程时,进程组自动消失。 ...

2018-10-09 · 3 分钟 · 1417 字 · Niuhe

Linux进程——地址空间

可执行程序是存储在磁盘设备上由代码和数据按某种格式组织的静态实体,而进程是可被调度的代码的动态运行。在Linux系统中,在一个进程的生命周期里,都有各自的运行环境和所需的资源,这些信息储存在各自的进程控制块中。 进程控制块主要结构如下: 用户标识 进程和会话标识 虚拟地址管理 文件描述符表 信号 ###进程地址空间 ...

2018-10-08 · 4 分钟 · 1732 字 · Niuhe

Linux信号处理——发送信号

Linux提供了应用编程接口,通过这些接口,进程可以向其他进程或进程组发送信号。root权限的进程可以向任何进程发送信号,非root权限的进程智能向属于同一个回话或同一个用户的进程发送信号。 ###发送信号 常用的函数原型如下 /* 向进程发送信号 pid>0 进程ID为pid的进程 pid=0 同一进程组的进程 pid<0 && pid!=-1 进程组ID为-pid的所有进程 pid=-1 除发送给进程自身外,还发送给所有进程ID>1的进程 成功返回0,否则-1 */ int kill(pid_t pid,int signo); /*向进程本身发送信号,等价于kill(getpid(),sig),成功返回0,否则-1*/ int raise(int signo); /*向进程发送SIGABORT信号,默认情况下进程会退出*/ void abort(void); /* 向进程发送实时信号 pid 接收信号的进程ID,只能向一个进程发送信号 sig 指定即将发送的信号 val指定信号传递的参数 成功返回0,否则-1 */ int sigqueue(pid_t pid,int sig,const union sigval val); union sigval { int sival_int; //传送一个整形数 void *sival_ptr; //传送任何数据结构的指针 }; typedef struct { int si_signo; int si_code; union sigval si_value; int si_errno; pid_t si_pid; uid_t si_uid; void *si_addr; int si_status; int si_band; } siginfo_t; 案例:使用sigqueue发送带参数的信号 ...

2018-10-07 · 3 分钟 · 1401 字 · Niuhe

Linux下glic库操作文件和目录

文件系统概述 Linux内核的各种真实文件系统、块设备和字符设备统一在虚拟文件系统的框架中,虚拟文件系统为应用提供了一组抽象的文件输入输出接口。 虚拟文件系统是对各种真实文件系统的抽象,在虚拟文件系统中定义了抽象的超级块、i节点和目录,它为真实文件系统提供了一种统一的框架接口。真实文件系统通过这些接口与虚拟文件系统相连接,真实文件系统是这些抽象接口的具体实现。 ...

2018-10-06 · 6 分钟 · 2846 字 · Niuhe

Linux信号处理——自定义信号处理函数

信号是内核和进程之间通信的一种方式,信号是由内核产生,并发送给一个或一组进程的短消息,用不同特定的数字表示不同的信号,信号的作用是表示某种事件的发生。 信号简介 分类 非实时不可靠信号,值为1-31 实时的可靠信号,值为32-63 信号由内核生成,信号生成和事件的发生密切相关,可将事件发生源分为以下三类: ...

2018-10-06 · 3 分钟 · 1482 字 · Niuhe

Linux下创建和使用C语言函数库

函数库介绍 函数库分为: 静态库 共享库(动态加载库) 应用程序在链接静态库时候,将使用的静态库对象嵌入至可执行映像文件中;而在链接共享库时,仅在可执行映像文件中保留加载目标对象所需的信息,在调用时,才真正将目标对象加载至内存。 静态库特点: 运行时无需外部库的支持,可执行文件中已经嵌入了所需的静态库目标对象,所以可执行文件可以脱离静态库独立运行。 较高的运行速度,运行时不需要加载其他目标对象 可执行文件体积较大 不容易维护,每次修改静态库,必须重新链接 共享库特点: ...

2018-09-26 · 3 分钟 · 1317 字 · Niuhe

Shell编程基础

Shell 是一种命令行解释器,目前 Linux 下最常用的是 bash 解释器。Shell 不仅可以解释用户输入的命令,还可以解释执行基于命令的 Shell 脚本语言。 Shell 脚本是由命令、Shell 变量和控制语句灯语法元素构成的文本文件。默认情况下,Shell 对脚本中的内容逐行分析,并依次在不同的进程中解释执行。通常 Shell 脚本结构如下: ...

2018-09-25 · 4 分钟 · 1628 字 · Niuhe

Pyserial快速上手

现在很多传感器都使用串口进行数据传送,我们再window上通常使用sscom33这类调试工具,在linux下通常使用带界面的cutecom或者命令行界面的minicom进行调试。 而使用Python写几行程API序进行自定义调试,就非常有用。并且可以快速的对传感器进行测试。本文介绍python的串口读写模块Pyserial ...

2018-09-13 · 1 分钟 · 462 字 · Niuhe

LSM303_Doc

简介 LSM303DLHC是一个三轴加速度和三轴磁场的传感器,具有倾斜补偿,工作电压在2.5-5.5V之间,工作电流10mA,数据接口是I2C接口。 引脚定义 VIN 2.5-5.5V电压供电引脚,SCL和SDA引脚的高电平电压和VIN引脚的电压相同。 VDD 根据VIN引脚的连接情况,VDD引脚用途不同,若VIN引脚连接了大于3.3V的电源,VDD可以想歪提供3.3V的电压和大约150mA的电流。如果VIN断开连接,可以使用2.5-3.3的电源连接VDD给LSM303DLHC模块供电。 注意: ...

2018-09-10 · 2 分钟 · 535 字 · Niuhe

远程ssh连接家中的树莓派

在局域网下可以通过扫描端口号,获得局域网下树莓派的ip地址,如192.168.1.118。之后通过ssh或者VNC等方法访问树莓派。那么如果我们离开局域网,怎么访问到家中的树莓派呢? 公网IP相当于街道中的门牌号,如果远程访问到互联网中的设备,必须知道设备的公网IP。 VPS + SSH远程代理隧道 这是这篇文章重点,需要: ...

2018-09-04 · 3 分钟 · 1224 字 · Niuhe