![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STM32
jacklood
这个作者很懒,什么都没留下…
展开
-
基于cubemx的STM32的freertos的串口通信
使用freertos系统实现电脑调试助手和正点原子开发板STM32F103ZET6的串口通信。(3)freertos.c中。(1)添加usart1.c。2、cubemx设置。(2)main.c中。原创 2024-08-24 17:47:34 · 141 阅读 · 0 评论 -
FreeRTOS/Source/CMSIS_RTOS_V2/freertos_os2.h(31): error: #13: expected a file name报错
在cubemx选择freertos的版本时如果选择V1生成后的工程代码不报错,如果选择V2生成后的工程代码编译报错。2、问题解决:修改cubemx配置,将V1.8.6改选为V1.8.5后编译不再报错。原创 2024-08-23 15:07:42 · 267 阅读 · 0 评论 -
基于cubemx的STM32F103ZET6的freertos实现多任务流水灯
使用freertos多任务系统实现正点原子STM32F103ZET6开发板的流水灯点亮控制。(1)SYS设置,注意选择定时器源为TIM1-TIM8的任一个,因为滴答定时器被多任务系统占用不能选择。3、程序代码添加:在freertos.c中创建的两个任务重添加for循环中的灯的亮灭控制代码。最后编译下载程序,可以看到开发板上的两个灯同时交替闪烁。(4)GPIO设置:两个LED灯引脚为输出。(3)freertos配置。添加两个任务:02和03。2、cubemx设置。原创 2024-08-23 10:35:11 · 352 阅读 · 0 评论 -
基于STM32cubemx的F103ZET6的485通信检测传感器回复数据时间
使用正点原子精英板,利用板子上的485通信电路读出一485通信的传感器数据,当按键按下后串口发出读取数据指令后,开始启动定时器计时,当串口收到传感器回复的数据时,结束计时,实现检测传感器回复数据的时间长度。需要注意的是,除了收发引脚之外,还要有RS485_RE引脚来控制485芯片的收发,当该引脚为高电平时,485芯片处于发送的状态,当该引脚为低电平时,485芯片处于接收的状态。5、设置GPIO引脚,两个按键引脚,两个LED引脚,一个485控制引脚。3、设置定时器,每隔10毫秒定时时间到。原创 2024-08-21 14:21:41 · 260 阅读 · 0 评论 -
如何在立创EDA的PCB电路板导入logo图案
5、进入后点击选择图片,将logo图片导入,注意修改图片尺寸,以使logo图案能放到合适的空白区域。6、后点击插入图片到PCB,将logo放到合适的位置即可,如下图。1、首先制作好logo图案,一般为公司logo图标,如下图。2、打开立创EDA的PCB文件,如下图。原创 2024-08-03 22:03:46 · 228 阅读 · 0 评论 -
基于cubeMX的STM32的RTC实时时钟实现
1、在仪器仪表的项目开发中,时常需要设备显示当前的日期和时间,这时,可以使用STM32自带的RTC实时时钟模块来实现此功能。这里我们使用STM32F103RCT6单片机芯片为例。最后生成程序代码,打开后可以看到工程文件中有rtc.c文件。这样,单片机每次断电后会从该设置的时间重新计时。3、(1)在rtc.c中添加如下代码。(2)在main函数之前获取日期时间。(3)在主函数中调用显示函数即可。2、cubeMX的设置。原创 2024-07-31 22:00:08 · 193 阅读 · 0 评论 -
基于cubeMX的STM32的模拟SPI驱动的OLED显示
需要注意的是,OLED的五个引脚是普通的IO口来模拟SPI通信,而不是真的用到了单片机的SPI模块。(3)最后在main函数中调用OLED初始化函数和显示函数即可。1、OLED的型号为7针SPI接口。(2)添加OledDev.C文件。2、cubeMX的设置。原创 2024-07-31 21:41:20 · 262 阅读 · 0 评论 -
基于cubeMX的STM32的定时器使用
这里使用STM32F103RCT6芯片,以定时器2为例,时钟源选择内部时钟。参数设置,预分频7200,定时器周期10000,则表示定时1秒钟。1、设置cubeMX。打开定时器2通用中断。原创 2024-07-28 21:37:44 · 222 阅读 · 0 评论 -
STM32自定义协议串口接收解析指令程序
这种方法可以解析不同的通信指令,而不存在串口收到的数据是不定长的而无法处理的问题。1、在使用串口接收自定义协议指令时,需要串口解析收到的是什么指令,举例通信报文为。那么,在单片机机收到上位机的指令后需要解析命令字是什么,然后做相应的功能处理。首先,在main函数中的while循环之前第一次接收数据。数据包的长度0x0000-0xFFFF。数据包的长度0x00-0xFF。然后中断回调函数如下编写。数据包所有字节按位异或。数据包所有字节按位异或。原创 2024-07-25 16:46:03 · 495 阅读 · 0 评论 -
STM32的HAL库串口阻塞接收和非阻塞接收的区别
1、使用函数的区别:是否有超时时间值。原创 2024-07-24 21:55:59 · 170 阅读 · 0 评论 -
STM32开发串口通信常用的串操作函数
buf为所要设置存储区的首地址,val为所要设置的值,len为所要设置存储区的长度,函数的返回值为所设置存储区的首地址。原型为unsigned int strlen(const char *str),原型的位置在string.h中,功能是计算串的长度,其中参数str表示串的首地址,返回值为串中字符的个数。format为格式化字符串,可以是需要原样输出的正常字符串,也可以是以%开头的格式规定字符,如%d、%s、%f等,其用法和要求与printf的format参数一样。(UserRxCnt为串口接收计数值)原创 2024-07-24 21:35:44 · 237 阅读 · 0 评论 -
STM32的GPIO输入输出方式设置示例
则需要在cubeMX上设置GPIO的输出方式,在GPIO设置栏中,单击“GPIO output level”下拉列表框,从中选择“low”,“GPIO MODE”设置为推挽输出,即“output push pull”,然后将“GPIO pull-up/pull-down”设置成“no pull-up and no pull-down”,将“maximum output speed”(最大输出速度)设置成high。输出有开漏输出、推挽输出2种输出方式。(2)示例2:GPIO做输入的设置。原创 2024-07-24 20:44:02 · 400 阅读 · 0 评论 -
基于cubeMX的STM32F103RCT6的PWM实现
(1)在tim.c文件中void MX_TIM1_Init(void)函数中添加HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);1、任务目标:使用定时器1的PWM通道1产生PWM波,使得与定时器1通道1相连的LED灯能按照PWM的占空比由亮到灭和由灭到量变化。最后编译程序,下载,按下正点原子miniSTM32开发板的复位键即可看到LED0灯的亮灭。注意,前面先声明变量uint16_t PluseWidch=0;(2)在main.c中添加。2、新建cubemx工程。原创 2024-07-24 15:01:11 · 353 阅读 · 0 评论 -
串口通信常用的串操作函数
2、该函数能方便的找到串口接收的数据中符合需要取出的自定义协议数据的内容,因为串口在不断地接收数据,单片机在收到数据后需要解析数据,即找到帧头及命令数据的地址,然后确认收到了该命令,以执行相应的处理任务。strstr()函数的原型在string.h文件中,具体为char *strstr(const char *str1,const char *str2);功能是求出串str2在串str1中首次出现的地址,如果str2是串str1的子串,则返回str2在str1首次出现的地址,如果不是则返回NULL。原创 2024-07-16 22:18:45 · 230 阅读 · 0 评论 -
用printf()函数格式化串口输出
1、printf()函数在C语言中表示的意思是将要输出的字符数据等输出显示到显示屏上,而在单片机上没有显示屏只有串口输出,这时就需要重新定义一下printf()函数,printf()函数里面是调用fputc()函数,所以需要重新定义fputc()函数;(1)fputc()函数可以在工程中的任意文件定义,比如在main.c中;(2)使用printf()函数需要调用头文件stdio.h;原创 2024-07-16 21:30:05 · 210 阅读 · 0 评论 -
基于STM32的HAL库的WS2812幻彩灯驱动程序
1、WS2812幻彩灯带有三条接线,5V、GND和控制信号线,利用单片机的SPI引脚可以发出不同频率协议的脉冲即可实现对幻彩灯带的各个灯珠的颜色和亮灭的控制。(但这两句为自动生成,只要开启DMA和SPI就行)需要注意的是,还需要cubeMX开启DMA和SPI,并在while循环之前调用。(3)main函数中的调用。原创 2024-07-10 22:04:00 · 818 阅读 · 0 评论 -
STM32空闲中断处理串口接受数据
(3)在main函数的while死循环中用_HAL_UART_GET_FLAG()宏读取IDLE中断请求标志,并判断其状态,若为复位状态,则结束数据接收处理工作,若为置位状态,则对接收到的数据进行处理,处理结束后用_HAL_UART_CLEAR_IDLEFLAG(_HANDLE_)宏清除IDLE中断请求标志。其中,_HANDLE_是串口的句柄如huart3,_FLAG_是所要检测中中断标志位,如检测空闲中断则取值为UART_FLAG_IDLE。其中,_HANDLE_是串口的句柄如huart3。原创 2024-07-10 21:44:55 · 454 阅读 · 0 评论 -
STM32对数码管显示的控制
0:ABCDEF,需要将这几段同时点亮,即写成高电平,GPIO_PIN_10|GPIO_PIN_6|GPIO_PIN_3|GPIO_PIN_1|GPIO_PIN_0|GPIO_PIN_9 = 0x34a。//即将0对应的ABCDEF拉高,点亮。2、首先要确定数码管的段选的8个引脚连接的单片机的引脚是哪8个,然后确认位选的4个引脚连接的单片机的4个引脚。原创 2024-07-08 22:06:11 · 538 阅读 · 0 评论 -
STM32实现多级菜单界面显示
1、main函数中,while循环之前。3、MultiMenu.c中。4、MultiMenu.h中。2、while循环中。原创 2024-06-15 13:47:18 · 1263 阅读 · 0 评论 -
STM32开发遇到问题解决2024.6.14
第一次使用开关电源,可以正常打到200kpa,第二次使用电池,上电后电磁阀直接动作,经过排查mos管是否损坏,测量控制极的上电电压,只有mos2的上电电压正常,说明其他三个mos管都损坏了,原因可能是在使用开关电源供电时,在结束时没有先拔掉mos控制板上的电源供电导致的。检查气压传感器采集气压不行的原因,审核原理图、接线并在开发板上测试都没有问题,不知原因,最后讨论后,试试3.3V供电,可以,原因找到:之前设计时以为5V和3.3V供电都可以,实际传感器手册上面写的是3.3V电压供电。1、电路板打样出问题。原创 2024-06-14 14:01:16 · 296 阅读 · 0 评论 -
STM32开发遇见问题解决2024.6.13
修改程序,将中断按钮的case中key置0,下载测试,按键按下后几乎没有反应;测试使用12V4.3寸工业屏,修改屏幕制作文件的字体大小为合适,中文字库重新生成测试,仍然有字体不能显示是红色方块,和屏技术支持沟通后,原因是因为串口屏的存储位置有分区,23号中文字库编号和41号变量图标的存储区有冲突导致。由于更换串口屏,把USB口的电路板供电拔了,主板断了电,但是,电池的电源线没断,导致12V电源一直给mos板供电了十多分钟,后面气泵电机突然蹦跶几下,发现有胶糊味道,把电池的电源线拔掉,线已发软了;原创 2024-06-13 13:59:48 · 139 阅读 · 0 评论 -
STM32开发遇见问题解决2024.6.12
解决深度不显示的bug,修改程序代码后,先是查看从flash中读出来的datatemp数据,发现没有深度数据,不知为何,查看代码,看到之前每次写入flash中的数据长度都是20,以为这种余量够了,加上了深度的2字节长度数据应该可以,测试把写入和读出长度都修改为了size的结构体长度,调试看到深度数据在第20和21位,而不是18和19位,因为时间时期的数据在结构体中的存储长度有字节对齐的原因,所以这样,所有读写的代码修改为size后,和读出的深度的数组位置后,测试,深度数据显示正常。1、历史数据存储混乱。原创 2024-06-12 14:04:50 · 215 阅读 · 0 评论 -
STM32开发遇到问题解决2024.6.7
汉字显示功能一开始不知道,用的是0号字库,查询“正常”的GBK的ASCII码后,修改程序,下载,显示的字为乱码,问询迪文屏技术支持后,得知0号字库不包含汉字,需要生成汉字字库,即ts3字库生成工具,又根据迪文哔哩哔哩官网的文本显示实现,迪文屏制作软件上带有字库生成工具DGUS字库,使用用制作字库,字库开头须为23,多次测试字体大小,最终确定字体大小为30*30的宋体可以,最终,汉字显示正常,测试,没有问题。拔掉12V电源,后测量mos板,没有问题,但实际已烧坏,不能工作。改为使用3A的保护板电池后没问题。原创 2024-06-07 13:57:22 · 253 阅读 · 0 评论 -
STM32开发遇见问题解决2024.6.6
查看迪文串口屏的使用手册,了解文本显示的方法,发送的指令中数据为ASCII码,找到一个十六进制数据转化为ASCII码的代码做参考,复制到程序工程中,并完善编写时间显示的串口指令程序,重新制作串口屏显示文件,下载程序后,文本显示日期时间正常,注意发送的指令的数组的数据长度如果短的话,显示会不完整。与迪文屏技术支持联系后,用描述指针来隐藏数据,查看使用手册后,修改制作文件和程序代码,测试,发现数据隐藏后还需要隐藏后显示数据指令,已添加左右翻页的部分,当数据量不大于6的情况下也需修改完善。1、实时时钟掉电保存。原创 2024-06-06 14:01:23 · 348 阅读 · 0 评论 -
STM32项目开发遇见问题解决2024.6.4V2
下载程序后,程序倒计时不显示,进入调试界面,查看倒计时变量是变化的,说明定时器已工作,再核对倒计时程序里面的地址和屏幕制作软件里面的地址不同一个1100一个1110,修改程序里面的地址为1100后,下载,运行正常。修改程序代码,加入按键按下后开始启动倒计时,并且在定时器回调函数中设计倒计时为0后,停止定时器工作,存储参数1和参数2和测量值保存在flash中,下载,测试,按下按键不工作,查看按键的接线没有接,接上后,按下,倒计时启动,当为0后,查看历史记录,数据有保存。2、串口屏变量地址不对应。原创 2024-06-04 14:13:56 · 467 阅读 · 0 评论 -
STM32项目开发遇见问题解决2024.6.4
并找来一个按键板,接好线到单片机,查看之前的按键程序,移植过来并修改。程序初步编写完成后运行,按下增加、减小、切换按键没有反应,单步调试查看不了按键的值,查看变量值没有改变,后来又把增加减小按键代码放在while循环中也不行,经过排查,调试程序观察按键扫描函数的返回值,让程序一直全速运行,按下增加、减小按键后返回值一直是0,说明按键扫描函数有问题,进入按键扫描函数,发现keyscan()函数中新增加的4个按键的对应的代码没有添加,修改后,下载程序,可以正常运行,可以增加、减小。2、按键需要按多次才起作用。原创 2024-06-04 13:59:01 · 179 阅读 · 0 评论 -
STM32单片机遇见问题总结1
2、修改后采集的ADC值仍不准确,初始ADC引脚应该为0.5V,测量出来却有0.89V,误差较大,排查原因,发现用的ADC引脚为PA7,该引脚在开发板上接的有上拉电阻,换用其他没有接任何器件的ADC引脚PC0和PB0,测试还是不行,在不接传感器输出线的情况,ADC口的电压应为0,采集后却有1.15V的电压,原因在排查中。7、使用USB转TTL模块在串口调试助手发送读屏指令,测试成功,屏有回复数据,单独再测试写数据指令,数据写入成功,写入的数据需要是2字节的,但是在界面制作数据变量时,数据是4字节的。原创 2024-06-01 13:55:03 · 266 阅读 · 0 评论 -
串口屏变量图标显示电量
2、然后可以使用美图秀秀逐个修改图片的像素为一致,比如像素为55*32,修改后如下。3、然后打开DGUS_V7.647软件,点击ICL生成工具。6、在变量图标右侧属性修改框修改属性,添加36变量图标文件。4、导入图片,点击生成ICL,如文件命名为36变量图标。7、这样变量图标配置完毕,生成屏幕文件。8、将以下屏幕文件下载到串口屏即可。5、然后在配置界面设置变量图标。原创 2024-05-31 13:49:51 · 238 阅读 · 0 评论 -
STM32待机休眠指令设置
1、如果使用STM32单片机需要在不工作的时候进入待机休眠模式,通过查询STM32的数据手册,可以通过几个指令语句设置先关的寄存器即可。当按键按下的时候,取消待机休眠模式,进入正常工作的状态。原创 2024-05-20 13:42:59 · 263 阅读 · 0 评论 -
迪文串口屏的中文字体显示
注意:如果汉字库的存储大小为2.4M字节,编号为26,如果实际的字库储存大小超过了串口屏分配的储存大小(22到32之间的大小),则就会不能完全将汉字库下载进入串口屏,汉字就不能完全显示。(3)需要注意的是,文件的数字编号一定要仔细,否则汉字不能完全显示,会出现某些字显示位红色的方框,这和串口屏的flash存储分配有关,因为查看DGUSII 应用开发指南。4、需要注意的是,在串口屏上显示汉字,还需要使用串口屏文件制作工具,生成汉字库,下载到串口屏中。(1)打开串口屏文件制作工具,选择DGUS字库。原创 2024-05-18 14:10:51 · 970 阅读 · 1 评论 -
立创EDA批量放置过孔及删除
2、然后选中铺铜的边框,再点击工具,选择铺铜批量过孔。1、首先将绘制好的电路板顶底铺铜,如下图。3、设置批量过孔的参数后点击确定。原创 2024-05-17 13:44:09 · 1642 阅读 · 0 评论 -
STM32程序下载电路设计
使用STM32F103RCT6作为单片机主控芯片,在进行电路板设计过程中,需要预留程序下载接口,可以选择使用JLINK下载器下载程序。1、查看STM32F103RCT6的芯片手册,找到下载程序的引脚端口PA13和PA14,如下。3、绘制完PCB电路板就可以使用JLINK仿真下载器和keil5下载程序了。需要注意的是:JLINK仿真器和单片机电路板之间要有一个转换小板如图。4、连上JLINK下载器后。原创 2024-05-16 13:56:10 · 371 阅读 · 0 评论 -
从嘉立创EDA提取PCB封装到Altiumdesigner的步骤
8、然后在AD点击设计---生成PCB库,即可生成AD使用的拨码开关PCB库。2、然后点击数据手册,显示出来4位拨码开关的封装图。5、点击文件,导出Altiumdesigner。9、原理图封装过程与PCB封装生成过程相同。3、点击立即打开,进入立创EDA编辑界面。6、勾选同意,并导出,放至一个文件夹。7、然后用AD打开这个文件。原创 2024-05-14 14:06:48 · 1567 阅读 · 0 评论 -
STM32控制蜂鸣器
电路中使用的三极管为NPN三极管,控制方法为BEEP引脚输入高电平,则三极管自上而下导通,蜂鸣器鸣响,BEEP引脚输入低电平,则三极管不导通,蜂鸣器不响。在一些设备仪表中,都需要蜂鸣器来发出提示音或者按键操作的声音,这里就用到蜂鸣器。1、蜂鸣器的分类为有源蜂鸣器和无源蜂鸣器,其区别是有没有振动源,这里我们常用有源蜂鸣器。原创 2024-03-07 09:34:28 · 974 阅读 · 0 评论 -
将结构体中的浮点数数据提取出来并发送至串口屏显示
3、这样,就可以使用pdata2指针按字节地址访问结构体中的成员数据,这里通过提取,将float LiuLiang_Value数据存放在了liuliang_buff[i]中。5、需要注意的是,直接将float LiuLiang_Value值给串口屏是无法实现的。现需要将其中的float LiuLiang_Value;4、然后,可以发送串口屏指令,将浮点数据显示在串口屏上。可以看到,单精度浮点数占据4个字节长度。再讲结构体指针做一个转化。2、先定义结构体变量。原创 2024-02-03 14:26:31 · 591 阅读 · 0 评论 -
迪文串口屏数据的隐藏功能
由于项目中在使用迪文屏显示数据的时候,需要在数据为0的时候不显示0,而迪文屏默认的数据变量在无值的时候显示为0,此时可以使用数据的隐藏功能指令。3、设置完描述指针地址和变量地址后,就可以发送指令5A A5 05 82 80 00 FF 00,将该变量数据隐藏。FF 00即表示将数据隐藏。原创 2024-02-03 13:47:17 · 732 阅读 · 0 评论 -
迪文串口屏文本显示的使用
从图中看出如果想显示日期、时间,则需要的串口发送数据的时候先转化为ASCII码才能在屏幕上显示出来,如图,数字1的ASCII码为31,数字2的ASCII码为32。变量地址为串口要控制文本框显示的地址,范围为1000到FFFF,编码方式这里选择GBK,文本长度为要显示的文本的字节数,这里期日、时间的字节长度设置为24,X\Y方向的点阵数为这里显示的字符的字体大小。注意,日期、时间中的“-”、空格和“:”需要查询ASCII码值,分别为0x2d、0x20和0x3A。原创 2024-01-27 11:45:56 · 2392 阅读 · 0 评论 -
基于cubeMX的正点原子miniSTM32对W25Q64的存储使用
可以实现将TEXT_Buffer数组的数据写入flash中,地址为倒数第100个地址,该地址也可以更改为从0地址开始写,然后从该地址读出数据,显示在屏幕上,从而实现了数据存储在flash中,掉电后flash中的数据不会清空。5、添加正点原子hal库的w25q64驱动程序,如下图,注意先添加.C程序后也要添加w25q64.h的头文件路径,具体添加过程不再叙述。使用cubeMX建立项目工程,结合正点原子提供的hal库对W25Q64闪存调用的例程,实现W25Q64的读写。3、设置完成,生成代码。原创 2024-01-24 17:06:33 · 915 阅读 · 0 评论 -
关于变量在多个.C文件中使用(Undefined symbol tempbuff (referred from main.o).问题解决)
于是,就将使用的代码移动了过来,为SetTxData1_toLCD(0x00,0x01);和UserUart1Send( tempbuff1,sizeof(tempbuff1));另外,如果是函数在别的文件中使用,可以不用加extern,如void UserUart1Send(uint8_t *send_data,uint8_t send_len);1、如图结构,想在multimenu.C和usart1.c中使用变量tempbuff。提示未定义,原因是只在usart1.h中做了extern的声明,如图。原创 2024-01-17 17:01:42 · 500 阅读 · 0 评论 -
迪文串口屏屏幕界面制作软件T5L_DGUS Tool\\DGUS_V7647的使用
使用迪文串口屏要首先用屏幕界面制作软件T5L_DGUS Tool制作界面,然后在直面上设置变量,变量对应有地址。单片机可以使用串口发送数组,数组为迪文屏的控制指令,比如写数据指令,该指令中有变量的地址,然后就可以将要显示的数据显示在屏幕界面上的相应位置。选择新建工程,分辨率设置为480*272,并在桌面新建文件夹wer,选择该存储路径,确认。7、因为电压值为数字显示,最后再生成一个0号字库,这里回到欢迎界面,选择0号字库生成工具。4、给AD电压值处添加数据变量图标,选择文本显示,选择数据变量。原创 2024-01-17 16:54:52 · 1251 阅读 · 0 评论