
stm32
文章平均质量分 63
HES_C
最求
展开
-
CH455G驱动数码管
ch455g数码管驱动原创 2022-10-27 14:28:30 · 3187 阅读 · 1 评论 -
stm32实现flash参数存储
此方法非常高效,使用结构体+联合体的方式实现flash的参数存储,到底有多简单高效,可以往后面看,如果觉得不高效,完全可以顺着网线来砍我。前提条件:1-flash的读写驱动程序,这里不做介绍实现思路:2-1结构体创建一个参数列表,大家知道结构体就是一个大箱子,里面放很多变量。2-2联合体创建一个结构体和数组的组合,联合体多个变量占用同一个内存,这个特性大家有没有一语惊醒你,没有也没关系,下面直接实现代码。#include <stdio.h>#include "stri原创 2021-02-27 16:51:53 · 2596 阅读 · 0 评论 -
stm32模拟输出PPM信号
PPM信号周期为20ms,分成10分代表10个通道信号,也就是2ms代表一个信号。0.5ms代表一个通道信号的开始,所以0.5ms-2ms为通道范围控制。 LED p1('A',8); //IO口初始化,这里就不介绍了,推挽输出u16 count=0;u16 pwm_count=1000; //总计数 周期20ms,20us进次u16 pwm1=25; //0.5msu16 pwm2=3...原创 2018-04-14 11:42:50 · 6336 阅读 · 0 评论 -
stm32使用DMA传输9路ADC使用中断处理数据
使用中断方式的好处就是在其它地方不会调用到DMA传输BUF。如果不小心调用或修改,可能会死机。具体原因没有深究。注意中断函数是否和.s文件里面一致,否则也会死机。根据需求去修改中断函数内容。dma_adc.h#ifndef _DMA_ADC_#define _DMA_ADC_#include "sys.h"#define ADC1_DR_Address ((u32)0x40012400+...原创 2018-04-11 14:14:36 · 7996 阅读 · 0 评论 -
stm103c8t6 tim1四个通道配置速度不一样(已解决)
使用这款芯片利用TIM1输出四路PWM信号,在改变占空比的时候发现CH1速度正常,CH2,CH3,CH4会有少量延时才会生效。目前没有找到问题所在原因,有大牛知道可以在下面回复下小弟。下面是代码。void PWM4_Init(u32 arr,u32 psc){ GPIO_InitTypeDef GPIO_InitStructure; ...原创 2018-04-13 09:49:29 · 1838 阅读 · 0 评论 -
stm32通过IO口模拟输出多路pwm
这里主要用于控制舵机,使用TIM1模拟了5路50Hz的PWM信号,只调节占空比控制舵机角度。最大能模拟多少路没有具体测试。缺点:因为是定时器中断模拟(中断比较频繁),所以会影响main函数运行。 LED p1('A',8); //IO口初始化,这里就不介绍了,推挽输出 LED p2('A',9); LED p3('A',10); LED p4('A',11); LED p5('A'...原创 2018-04-14 10:37:59 · 13623 阅读 · 0 评论 -
如何合理的运用stm32的flash内存
关于stm32的flash操作,网上已经有很多详细的介绍了,这里只是总结一些告诫。在使用flash存储数据的时候,对于新手来说,并不知道该把数据存在哪一个地址上,怕存到程序区域,或者越界。关于这一点很容易搞清楚,首先我们需要看我们编译出的程序有多大。上图可以计算出程序的大小,bin=Code+RO+RW 1798...原创 2018-04-27 10:35:40 · 1510 阅读 · 0 评论 -
stm32最简单的实现BootLoader
BootLoader大家应该都知道是干什么的,简单的来说就是程序开始运行前的一段程序。在成熟的产品中,通常都是采用BootLoader方式来升级产品的程序。也就是IAP升级。在了解完基本的实现原理后,可以做到用上位机升级(一般的产品大多采用这种方式,显得非常专业有专用的升级软件,其实背后原理就是BootLoader升级方式)。当然还有一些联网在线升级也是如此。网上有非常多的文件有介...原创 2018-04-28 12:58:39 · 20560 阅读 · 11 评论 -
一阶互补滤波应用到stm32 ADC采集上
大家都知道,adc采集,不管分辨率高低,特别是采集电压电流的值都是有一定漂移的,比如漂移个100mv左右是很正常的现象。很多人都是用平均滤波法,这里我想说的是其实没有用,我之前就一直用的这个,真心效果很差。其实这个问题可以用 平均滤波 加 一阶互补滤波 比较完美的滤除波动。我这边只用平均滤波漂移在100mv,加上互补滤波后漂移基本只有10mv。已经算是相当完美了。放小1...原创 2018-08-01 18:11:40 · 3693 阅读 · 2 评论 -
轻量级嵌入式uip协议函数简单阅览
本章供自己复习使用,只是介绍一些标准的函数,不介绍移植过程,也不介绍uip协议。有基础的人一看就明朗。没基础的可以看看这篇百度文库,非常适宜:https://wenku.baidu.com/view/a9f222f09e3143323968938c.htmlUIP简单使用个人总结注:质料来源于网络部分函数:uip_acked() 一个数据包到达,确认先前发送到数据uip_...翻译 2018-08-18 17:58:56 · 1031 阅读 · 0 评论 -
自己编写USMART调试组件
关于USMART调试组件,用过的大家都不陌生,应该是出自于原子哥的教程。因为我百度一看全是原子哥的源码,原子哥这个模块写得确实不错,让我吸取了不少。不过最近发现这个组件有一个很大的问题,函数所有的参数都是int,也就是说所支持的函数不能有其他数据类型,比如常用的float。数据类型这么多,其实用到的就是int和float。(说明:虽然可以用其它方式来弥补,但是还是让人不舒服)下...原创 2018-08-22 15:37:42 · 1802 阅读 · 0 评论 -
DM9015网卡uip移植到stm32
DM9015网卡是用于嵌入式设备的某网卡,使用spi接口通讯。图片某宝偷的。这个模块内部不带网络协议栈,像TCP/IP UDP啥的都是没有的,需要自己编写或者,移植开源的协议栈。我这边主要参考官方历程移植优化精简的uip移植。因为官方的历程占用内存太大了,编写混乱,关键还是写的http历程,http没搞过,不懂那协议啊,只能自己一步步裁剪,只处理TCP原始报文。芯片:stm3...原创 2018-08-23 17:33:26 · 999 阅读 · 0 评论 -
STM32一个定时器输出不同频率
1个定时器输出4路频率相同,占空比不同的PWM比较容易实现,只需要改变每个通道的比较值就可以了要想输出频率不同,占空比相同,需要用到比较模式,当比较成功IO翻转。同时还需要用到定时器中断去重新设置比较值。稍微解释下面语句:Period是计数值prescaler是对总线时钟的分频这个函数是设置比较值基本要点是理解上面这些。没接触过定时器的会比较抽象,不能理解。...原创 2019-03-20 17:18:49 · 5736 阅读 · 0 评论 -
stm32 adc的dma传输案例
dma不多说了,原理啥的网上一大推,源码也有注释,理解起来很容易案例是传输adc的4个通道,需要多个或者其它的,照着修改就行。#define ADC1_DR_Address ((u32)0x40012400+0X4C) //ADC数据的地址u16 ADC_buf[4]; //DMA传输BUFvoid adc_dma_init(){ GPIO_InitTypeDef GP...原创 2019-03-21 10:46:12 · 1931 阅读 · 4 评论 -
stm32定时器输出4路频率可调的原理分析
1标题说不清楚,简单点说就是一个定时器输出4路可调节频率的pwm。2这个功能能干嘛?一般是用于控制多个步进电机。这样做一个定时器就可以控制4个电机了。先上代码吧u16 capture = 0;vu16 CCR1_Val = 32768;vu16 CCR2_Val = 16384;vu16 CCR3_Val = 8192;vu16 CCR4_Val = 4096;voi...原创 2019-03-29 17:03:47 · 2423 阅读 · 8 评论 -
stm32输入捕获,捕获高电平
输入捕获就是用定时器检测引脚上的电平时间,可以检测高电平时间和低电平时间,然后可以算引脚上信号的频率和占空比。基本思路就是利用定时器的输入捕获功能。定时器捕获到高电平或低电平就会进入捕获中断例如:我们要捕获高电平时间0 设置定时器计数频率和装载值,一般设置1MHz,655351 设置定时器捕获为高电平捕获2 进入捕获中断后,获取CNT计数值或CCRx值,定时器捕获到电平...原创 2019-03-30 16:12:18 · 14020 阅读 · 2 评论 -
stm32-A4988驱动步进电机
步进电机,不多做解释,百度一大堆,虽然写的都一样。1.步进电机用的2相四线,下面是某淘宝图片。2.驱动器是A4988模块,据说是3d打印机专用。灰色的脚可以悬空,也可以用上。ENABLE 使能 1停止STEP pwm(50%) 控制速度 (频率范围:我试了下大概1Hz-1KHz都可以跑的,当然频率越慢,电机相当于静...原创 2019-03-28 09:26:41 · 11721 阅读 · 7 评论 -
stm32使用DMA传输9路ADC
这里采集的是ADC1的ch0-ch8只需要引用ADC_buf[10]这个数组就可以,ch0数据实时保存在ADC_buf[0]中,以此列推。dma_adc.c#include "dma_adc.h"u16 ADC_buf[10]; void ADC1_DMA_init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriph...原创 2018-04-09 16:37:34 · 669 阅读 · 0 评论 -
正点原子stm32模拟IIC
#ifndef __MYIIC_H#define __MYIIC_H#include "sys.h"////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途//Mini STM32开发板//IIC 驱动函数 /...翻译 2018-03-16 11:14:02 · 7362 阅读 · 0 评论 -
keil下生成与使用库文件
写过系统级程序的同学对库(lib,dll)都不陌生把,一个是静态库一个是动态库。库大家都知道是不需要编译的,而且别人是无法看到源代码的,这样的好处就是编译快,并且方便移植,更安全。但是keil好像只能用静态库,这里就简单的说一下把。例如我有一个LED的文件,可以实现点灯的功能,并且是c++开发的,我想把它做成静态库方便以后使用。等我搭建一个c++的keil工程......................原创 2018-02-08 18:53:11 · 5459 阅读 · 0 评论 -
c++串口上位机协议包封装
上一篇说到串口协议的封包与拆包,主要要是应用于单片机与单片机通讯,或者与上位机程序通讯,这里我是与上位机程序通讯。思路:因为此功能是用c语言写的,所有在单片机上可以使用,在pc机上也是可以使用的。这是单片机主函数代码: int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC原创 2017-10-30 14:02:06 · 3041 阅读 · 0 评论 -
stm32-NRF24L01通信
//////////////////////////////////////////引脚分布,IRQ PA2CE PA4CS PA3SPI1 (记住是SPI1的接口) SCK PA5 MISO PA6 MOSI PA7////////////////////////////////////////接好引脚,初始化好就可以使用了。http://download.原创 2017-12-01 16:28:53 · 861 阅读 · 0 评论 -
stm32定时器1的2路互补PWM
void TIM1_PWM_Ini(u16 arr,u16 psc){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TI转载 2017-12-27 10:26:22 · 2174 阅读 · 2 评论 -
stm32初始化三个串口
serial.c**************************************************/#include "serial.h"int fputc(int ch,FILE *p) //在使用printf时系统自动条用此函数{ USART_SendData(USART2,(u8)ch); while(USART_GetFlagStatus(USA翻译 2017-08-21 14:23:09 · 9994 阅读 · 1 评论 -
keil生成bin文件
在烧写stm32程序的时候,有时候需要用到串口烧写。那么就需要一个可烧写的bin文件了。我们可以直接用keil来直接生成,不过keil的默认配置是没有这个设置的。配置如下图添加指令:fromelf.exe --bin -o "$L@L.bin" "#L"原创 2017-12-28 09:15:07 · 1082 阅读 · 0 评论 -
stm32-4路pwm优化
tim_pwm4.h/*********************************************************TIM3输出4路pwm,单独控制占空比**********************************************************/#ifndef _PWM_#define _PWM_#include "stm32原创 2018-01-03 16:30:14 · 1075 阅读 · 0 评论 -
Windows下stm32串口下载程序(DOS版本)
每次更新程序都需要用到stlink调试工具,感觉非常不方便,笔记本搬来搬去,帮客户更新程序也不方便使用别人的下载工具。那么只能自己写一个下载工具了。刚开始我是想研究一下stm32 BootLoader的官方协议,然后通过协议来写这个程序。后面找到官方质料AN3155_USART protocol used in the STM32 bootloader_en.pdf(自行百度)。全原创 2017-12-28 12:33:43 · 2414 阅读 · 5 评论 -
当你的keil工程同时有c文件和CPP文件
当你的keil工程同时有c文件和CPP文件,那么c文件的函数在cpp文件中肯定无法访问了。正常的include“”xxx.h“”那肯定是不行的,编译会提示说c文件中函数未定义。那么只要稍微修改一下就好了。extern "C"{#include "XXX.h"}在cpp中这样包含c文件就ok了原创 2017-12-28 15:58:37 · 3978 阅读 · 0 评论 -
stm32中pwm频率和占空比设置
对于72M频率来说,计算pwm频率是:频率://Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)占空比://duty circle = TIM3->CCR1 / arr(单位:%)这样每次改变频率和占空比都要手动算一下,非常不方便。下面进行改进://PWM输出初始化//arr:自动重装值//psc:时钟预分频数voi原创 2017-12-28 16:26:03 · 26388 阅读 · 12 评论 -
关于keil中的c语言和c++的混合编程
c语言编程简单,但是对于编写面向对象来说,实在是不方便。一个工程是很多驱动文件的集合,底层驱动文件一般使用c语言来编写,但是一般数据封装和功能实现使用c++开发会更加方便。所以在工程中使用c语言和c++混合编程是非常又必要的。第一步先设置一下keil的c++编译环境,只需设计下面一步即可。a.h文件: #ifndef _A_ #define _A_ voi原创 2017-12-29 16:56:11 · 13023 阅读 · 4 评论 -
stm32内部flash读写
在stm32中内部flash一般都比较大,光程序很难存满,那么后面的剩余地址就可以用来存储数据(少量数据)。读写地址不能在程序存储之前,计算好程序大小计算存放地址。flash.h#ifndef _FLASH_H#define _FLASH_H#include"sys.h"#define ADDR 0x8010000//在指定地址写入数组void FLASH_WriteByte(原创 2018-01-18 11:04:21 · 988 阅读 · 0 评论 -
stm32产生随机数
stm32使用rand()函数产生随机数,在OS编程中会设置srand()随机种子,其实随机种子就是某一时候的time()的值,因为这个值不同,所以每次的随机数都不同。 那么我们需要在stm32中模拟这样的一个随机种子 1——可以采用ADC采样值,必须是一个空脚(没接GND&VCC) 2——可以采用定时器的计数值上传部分代码 /* 必须要每次刷新种子。每次的随机数才会不一样原创 2018-01-18 11:33:48 · 15450 阅读 · 3 评论 -
keil库的运用,进阶版
看一个图片就ok了。看起来是不是很清晰脱俗,非常舒服。下载运行时ok的。库文件到时候会分享出来,供使用。原创 2018-02-08 19:29:56 · 444 阅读 · 0 评论 -
实现NRF24L01自动对频功能
大家知道这个模块一个只有128个频道,那么代表着同一附近最多只能存在128个设备,不过这个环境中也很难同时存在这样的现象.如果要制作很多个这样的设备,每个设备需要工作不同频率上,那么就需要每个设备有不同的代码(因为要修改频道)。想想就很可怕。这也不是一个程序员做的事情。在网上找了几天也没有找到相关技术,可能是因为商业原因吧,只能自己琢磨实现思路。最近2天做了一个自动対频的思路,因为原创 2018-01-20 10:31:55 · 9938 阅读 · 4 评论 -
串口命令解析
作用前面已经介绍了,这里说一下本文件的使用。文件:http://download.youkuaiyun.com/download/hes_c/10247532本文件直接使用在stm32平台上实现功能是,例如串口中数据有:sjakjshdkjdjsahesmklsahesnkjshesndsahes能精确的把每个hes解析出来。使用方式也简单:添加我上面的库文件到你的工程串口中断中调用以下函数.h文件添加想要查...原创 2018-02-09 16:34:13 · 5521 阅读 · 0 评论 -
串口命令解析
串口是流数据,有时候想从串口中得到想要的数据,但是却发现很难处理,因为它没有协议,没有长度。就例如AT命令会有很多的返回值,通常都是一下字符串,想从串口中正确的拿到这些字符串,并且所有的命令字符串都不丢失。例如:GETOKlsakOKlsasGETOKlkaslkllOK这是串口发送过来的数据,我们需要寻找的数据是GETOK,并且里面有2个这样的命令,而且还有很多我们不需要的其它数据。你会发现你...原创 2018-02-08 17:16:08 · 4754 阅读 · 0 评论 -
stm32使用tim3输出4路pwm(khz级)
tim3_pwm4.h/*********************************************************TIM3输出4路pwm,单独控制占空比**********************************************************/#ifndef _PWM_#define _PWM_#include "stm3原创 2017-08-26 13:43:46 · 9409 阅读 · 1 评论