stm32
随风飘零翼
记录自己的调试代码内容,简略。
展开
-
Modbus RTU 主机协议栈移植 STM32标准库
modbus slave遇到不少bug,在用06和03寄存器时,出现软件界面不显示写入的数据(但是发现有返回写入的数据),读寄存器时,从机地址为1时,发送的数据全为0,从机地址改为2和3没有此情况。因为很久没用使用标准库,这里犯过一个错,导致找问题花了一会时间,每次执行串口中断接收都会让程序跑飞,卡死。设定了10ms的TIM4,串口2接的485收发芯片,配置代码在这里省略。不正确的移植方法,在使用modbus slave时候,发送完就会卡死。工作中用旧项目用标准库试着修改,记录一下自己踩的坑。原创 2024-05-24 15:30:04 · 456 阅读 · 0 评论 -
ADS1220 STM32硬件SPI驱动程序
前一段时间温故了下标准库,使用的是F1系列芯片,测试程序。原创 2024-05-17 14:10:20 · 2508 阅读 · 0 评论 -
DAC7311 HAL库硬件SPI发送16位数据
16位无需强制转换原创 2024-05-17 13:41:11 · 811 阅读 · 0 评论 -
STM32 硬件SPI应用 WK2124串口扩展芯片
一般使用Wk2xxxWriteFifo和Wk2xxxReadFifo。根据官方实例代码修改而成,具体寄存器参数请参考手册。SPI模式0.CS片选信号是自己用软件设定。仅列出读写寄存器修改,后续函数无需修改。全双工模式,8位数据,有效位为最高位。预分频结果最终在芯片工作范围内即可。port:串口1-4。原创 2023-04-13 10:11:00 · 1199 阅读 · 0 评论 -
CubeMX调用DSP库
把Cube库中对应型号文件夹中的DSP头文件复制到自己工程目录下。再次编译通过,调用FFT函数。下载安装完记得勾选。原创 2023-03-24 15:26:41 · 484 阅读 · 0 评论 -
STM32CubeMX 移植TFTLCD
我这里的主频设置为168M 则HCLK=1/168M=6ns 再根据芯片手册的驱动时序计算。删除至红框中的函数,延时函数替换为HAL_Delay。这里也要替换下自己的代码风格。可以删除,因为初始化io口时已经为高电平。先把工程原本的u8,u16等统一替换成库文件原本的uint,也可以再自行typedef定义一遍。删除lcd.c中的一些初始化函数和代码。这些已经在fsmc.c和gpio.c中初始化好了。RST复位引脚与32的复位引脚相连,上电复位。不同引脚选择的 NEx不同。TFT的背光高电平点亮。原创 2023-03-23 16:27:22 · 772 阅读 · 0 评论 -
回想自己当初刚学单片机
上的民办本科条件太拉了,没办法自己怂选的,技能大赛没被保送,省赛客场比赛差一分进国赛,3个人比赛,有个一直划水的,也没办法,实验室真正会做东西的就几个人,都各自负责不同项目。记得stc有个冷启动我不小心勾上了,导致没法下载程序,我以为被我玩坏了,后来百度解决的。对大二开始学的stm32,跟着正点原子视频入门,我看视频课容易睡觉,听不下去理论的,但还是和当初学c51一样研究了底层。后面就开始学画板子,各种主控板和电源板,还有自己找些感兴趣的东西进行制作,不是很高大上的东西,就不献丑放出来了。原创 2023-03-10 14:49:25 · 133 阅读 · 0 评论 -
STM32 PWM输出
其他高级定时器原理相同,需要用到哪个引脚就开启对应某个通道。Clock source一般选择内部时钟。主频设定为64MHz,预分频64,重装载值1000.PWM频率为64M/64/1000=1k。用启动PWM和设置TIM捕获比较寄存器的值 函数。占空比为500/重装载值 50%使用基本的PWM输出。原创 2023-03-17 09:40:54 · 197 阅读 · 0 评论 -
STM32空闲超时接收中断方式
以前一直用DMA方式接收数据,今天试了下中断接收方式,简单测试下。这样每一次接受数据都是会重头覆盖读取,不会发生错位问题。已配置好串口收发模式和NVIC。原创 2023-03-23 10:59:25 · 873 阅读 · 0 评论 -
STM32 HAL库 ADC+DMA
写了部分关键代码,在两个任务中OLED和串口打印分别显示的通道值。原创 2023-03-15 10:30:24 · 2010 阅读 · 0 评论 -
STM32 HAL库 软件触发ADC 多通道连续转换
这里我把6和3不按从小到大的顺序排列。转换模式选择Backward则是从大到小顺序。注意,自定义转换顺序模式对通道数量有限制。12BitADC,没有开启过采样。不同通道转换顺序可自定义。想要使用后面几个adc通道需要选择。此时通道转换顺序从小到大。使能扫描和转换模式。原创 2023-03-15 09:45:30 · 1693 阅读 · 0 评论 -
蓝牙HC05常用调试指令
拿到手后,用USB转串口工具接上电源和地,以及交叉相连tx和rx引脚,按住模块上的小黑点再通电进入AT模式。AT+UART=115200,0,0, 波特率修改为115200,0停止位,0校验位。波特率调整为38400,这是AT模式的通信波特率。AT+ROLE或AT+ROLE?,返回当前主从模式,1表示主机,0表示从机。AT+ROLE=X,修改主从模式,X为1或0,对应主机和从机。AT+BIND=XX,XX,XX,修改绑定地址(CMODE=0)发送AT加回车,返回OK表示通信成功。原创 2023-03-21 09:50:42 · 2450 阅读 · 1 评论 -
OLED硬件IIC HAL库 (硬件SPI使用注意事项)
【代码】OLED硬件IIC HAL库。原创 2023-02-22 14:12:48 · 403 阅读 · 0 评论 -
DS18B20 基于HAL库 IO模拟及注意事项
DS18B20原创 2023-02-22 14:06:11 · 1019 阅读 · 0 评论 -
stm32定时器实现 微秒延时
HAL库定时器原创 2023-02-22 13:46:18 · 1187 阅读 · 0 评论 -
用union记录硬件地址位
板子上留有拨码开关,用来级联不同板子,判断是哪块板子发送的数据。头文件中声明#define Address1_IN HAL_GPIO_ReadPin(Address1_GPIO_Port,Address1_Pin)#define Address2_IN HAL_GPIO_ReadPin(Address2_GPIO_Port,Address2_Pin)#define Address3_IN HAL_GPIO_ReadPin(Address3_GPIO_Port,Address原创 2022-04-20 16:37:55 · 381 阅读 · 0 评论 -
使用共同体进行串口收发
.h#ifndef __TEST_H#define __TEST_H#include ""#define BufferSize 7struct Status_BYTE{ uint8 Head, Com, UID[2], POT[2], checksum;};union Send_Data{ struct Status_BYTE byte; uint8 all[BufferSize];};e.原创 2022-03-07 15:45:52 · 385 阅读 · 0 评论 -
STM32 HAL库 串口DMA接收不定长数据
上一期配置https://blog.csdn.net/zy19981110/article/details/123005092?spm=1001.2014.3001.5501参考他人的代码https://blog.csdn.net/euxnijuoh/article/details/81638676?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_releva原创 2022-02-24 17:36:12 · 3337 阅读 · 2 评论 -
STM32CubeMX的使用,配置DMA串口
这次记录下最近调用的外设。DMA以前用得很少,只通过ADC采集使用,开启后就直接读那个数组就可以了。我对dma的理解就是不占用cpu,数据传输速度快,可以直接从外设和内存间相互读取。目前的工作用的芯片只能使用hal库开发,stm32g0系列性价比高。用cubemx把基础外设全配置跑了一遍,给我最大感受就是方便快捷,在st自家芯片中移植性强。时钟和晶振配置不多说了,网上都很全了,可以不使用外部晶振,但HCLK最大只能到64M,最好还是外接晶振让系统更可靠稳定吧。这里我创建了个新的ioc文件,之原创 2022-02-18 16:55:14 · 13212 阅读 · 0 评论 -
stm32定时器扫描数码管(无锁存器)和矩阵按键
如果不使用定时器,会有很多冲突。比如数码管显示不正常,按键响应问题。定时器时间消隐效果还不错,根据实验室另一个光伏项目的朋友用stc15代码改过来的。数码管#ifndef __LED_H#define __LED_H #include "sys.h"#define DX0 PAout(0)#define DX1 PAout(1)#define DX2 PAout(2)...原创 2019-07-02 19:27:46 · 2835 阅读 · 1 评论 -
DMA多通道AD
初始化及配置#include "ACS712.h"__IO uint16_t ADC_Value[2] = {0, 0};void adc_Configuration(){ GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStruct...原创 2019-07-02 19:10:45 · 1600 阅读 · 0 评论