11 2021 档案
摘要:Cubemx可以生成多种usb设备的初始化代码,本节我们就使用它来生成一个usb HID鼠标的工程,在开发板上运行以后,可以模拟usb鼠标的功能。 1)生成USB HID工程 仍然使用串口工程,如下图添加USB的配置: 可以看到,勾选usb device的...
阅读全文
摘要:步进电机每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角度输入的脉冲数成正比,转速与脉冲频率成正比。它的驱动方式也比普通的有刷直流电机复杂。 本节我们就来讲讲步进电机最基础的驱动方式。 1)步进电机的内部结构 先简单介绍一下主要的两种步进电机:单...
阅读全文
摘要:stm32很多系列的芯片都带usb接口,而且cubemx也能生成多种功能的usb初始化代码,使得一般用户可以不用关注usb底层复杂的实现方式,直接使用HAL函数就能方便地实现usb通信。本节我们就来学习cubemx生成虚拟串口(USB virtual COM)...
阅读全文
摘要:本节我们来学习stm32内部flash的读写。在某些应用中,我们需要保存少量掉电仍然不丢失的数据,而在电路板上额外增加一块eeprom或者flash又太浪费硬件资源,这时我们就可以把这些数据保存在stm32内部的flash里。 1)stm32内部flash简...
阅读全文
摘要:本节我们来讲一讲stm32的电源控制,也就是低功耗模式。 1)stm32的低功耗模式简介 stm32有三种低功耗模式,功耗依次降低: 睡眠模式(sleep mode),停止模式(stop mode),待机模式(standby mode)。 睡眠模式:只有内核...
阅读全文
摘要:本节我们介绍stm32的SPI总线接口,并使用SPI接口来访问气压计BMP280。 1)SPI基础知识 SPI(Serial Peripheral Interface)串行外围设备接口,是一种高速的,全双工,同步的通信总线,一般需要四根线: MISO:主器件...
阅读全文
摘要:本节我们介绍stm32定时器的PWM输出。 1)PWM基础知识 PWM的全称是Pulse Width Modulation,即脉冲宽度调制。它是数字信号,只有0、1两种状态,它通过一个周期中0、1所占不同的时间比例,来等效模拟信号。 假设一个数字信号源的高电...
阅读全文
摘要:J-link是arm开发常用的一种下载工具,基本通杀各厂家的arm芯片,而且价格也比较亲民。但是J-link v8版本的工具有个毛病,可能会掉固件,本人也遇到过。如果你发现平常用着好好的J-link,突然某次计算机就识别不了了,就很可能是掉了固件了。 这一节...
阅读全文
摘要:本节我们介绍I2C总线,并使用stm32的I2C总线来访问加速度传感器ADXL345。 1)I2C基础知识 I2C总线通信比较适合设备内部各芯片间的通信,它只需要两根信号线。 I2C可以挂载多个主机和从机,通信总是由主机发起。每个从机都有唯一的地址,主机通过...
阅读全文
摘要:本节我们讲几个测量电阻的方法。 1)基本电桥电路 先了解一下最基本的电桥电路,如下图: 图中R4是待测电阻,一般在调整电路参数时,选择合适的R1、R2、R3,使得: R1/R2 = R3/R4 此时图中电压表的读数近似为0,电桥平衡。 之后,如果R4电阻...
阅读全文
摘要:stm32的芯片,出厂时都自带了串口烧写功能,可以在不使用特殊的下载器、只用串口的条件下将程序烧写进去。 串口烧写需要的上位机软件,网上有很多免费的软件可用,我们使用sscom这个串口软件,可以从小工具里找到它带的stm32 ISP,也即是串口下载功能: ...
阅读全文
摘要:看门狗(watch dog)是一个定时器,可以设置一个定时时间,计时到时会把MCU复位,所以MCU必须要在定时时间到之前将计数值重置(这个动作通常称为喂狗)。 在嵌入式系统中加入看门狗,可以监测MCU是否还在正常运行,如果软件跑进死循环、或者出现其他错误,导致...
阅读全文
摘要:RTC (Real Time Clock)即实时时钟。它可以提供时钟、日历的功能;并且可以使用外部电池供电,在极低的功耗下保持计数,使得断电之后还能够计算时间,所以名为实时时钟。 STM32f103的RTC,本质上是一个32位的计数器,在断电后,由电池供电还能...
阅读全文
摘要:这一节我们讲一讲怎样将串口的输出重定向到printf。 对于printf这个函数大家一定非常熟悉,这个函数用于打印输出。一般c语言编程的入门程序,就是用printf打印hello world。 而在单片机中,裸机编程的条件下,并没有一套直接可以调用的打印输出函...
阅读全文
摘要:ADC即模数转换器,能把模拟量(电压)转换为数字量。 这一节我们讲讲stm32的ADC用法,stm32自带的ADC有四种用法:轮询、中断、DMA、定时器触发。 1)ADC轮询的用法 我们在之前的串口中断工程上修改,以便于打印数值查看。 使用cubemx打开串...
阅读全文
摘要:这一节我们以外部中断为例子,讲讲中断的优先级和中断向量表的知识。 1)cubemx生成代码 首先还是在cubemx中生成代码,选择器件、设置SYS(调试接口)、设置RCC(外部晶振时钟源)。 然后设置GPIO引脚,选择PC13作为输出(用于LED指示),如下...
阅读全文
摘要:上一节我们使用中断结合环形fifo,实现了比较方便、高效地串口收发,这个方法在几乎所有的单片机上都可以使用,就连最基础的51单片机也能支持。而到了stm32这款强大的单片机,有更多的用法可以实现高效的串口收发,本节我们就介绍使用DMA传输串口数据。 先简单介...
阅读全文
摘要:上一节我们学习了串口的轮询收发,以及HAL库自带的中断收发。也分析了优缺点,这一节我们来讲讲如何改写HAL库函数,使它能更高效地收发数据,更方便地使用。 早些年在使用51单片机、AVR单片机的时候,最有效的办法是开两个环形缓冲区,一个用作发送、一个用作接收。...
阅读全文