- 博客(22)
- 收藏
- 关注
原创 Freemodbus实现一主多从
RS485电气协议和Modbus软件协议-CSDN博客,Modbus协议本身简单,但是想用软件实现是很复杂的,而Freemodbus是一个开源的库(只有从机代码开源),这个库已经实现了Modbus通信协议的大部分内容,比如3.5个字符空闲中断等等。我们只需要学会移植这个库,实现自己的逻辑代码即可。这是下载Freemodbus库的官方网址,代码在GitHub上,国内可以使用加速器访问,比如Steam加速器(现在叫WattToolkit)将里面的GitHub加速勾选就可以访问了。
2025-01-19 22:48:29
2353
原创 RS485电气协议和Modbus软件协议
图3.1 Modbus软件协议Modbus支持三种传输报文,ASCLL码是传输字符、RTU是传输二进制或十六进制数据、TCP是以太网用的。图3.2 Modbus报文Modbus协议本身是比较简单的,但是如果要自己用软件写代码去实现,就很复杂了,这里可移植freeModbus库,从机库是开源的。
2025-01-16 15:44:05
1196
原创 ADC相关算法以及热敏电阻测温
本文章介绍在使用STM32F103片上外设ADC时,可能会用到的一些算法,平均值滤波算法、中位值滤波算法、快速排序算法、二分查找法。并且实现了使用热敏电阻测量温度,串口打印显示。使用到的资源如下:PA0用于热敏电阻的ADC,PB10和PB11用于串口。
2024-12-28 18:55:57
1504
原创 STM32ADC独立模式单通道采集实验
本次实验用的板子是STM32F103C8T6,使用标准库开发,使用ADC1的通道1即PA1口采集k一个502可调电阻动触点上的电压,VCC是3.3V,使用串口3打印信息显示在上位机串口助手上。本次实验只是为了说明ADC 的工作原理和底层寄存器的配置。代码和所用资料放在下面的链接里面了。
2024-11-24 23:29:57
1708
原创 STM32F103C8T6实时时钟RTC
STM32F103C8T6外部低速时钟LSE(一般为32.768KHz)用的引脚是PC14和PC15,所以这两个引脚一定不要再外接其它的电路,比如按键、LED灯之类的,会导致LSE时钟频率出错甚至不起振。RTC内的CNT计数器就可以用来存储时间戳,然后在软件内将时间戳转换为日历时间。
2024-11-21 22:52:48
3349
2
原创 STM32定时器输入捕获应用实例:红外遥控
接收完4字节后,做数据校验,判断用户码的两个字节是否为遥控器手册上写的字节,判断数据码codeBuf[2]和codeBuf[3]是否互为反码,都成立表示codeBuf[2]确实是遥控码值。根据ir_drv.h头文件里的的API接口函数原型,我在ir_drv.c中的任务就是实现红外按键的码值获取,而红外遥控发送的NEC协议由引导码+用户码+数据码组成,引导码9ms+4.5ms是固定的,用户码是用于识别不同厂家的遥控器防止干扰,数据码就是我们想要获取的按键码值。1、按下按键的1,蓝色灯亮,按下按键2,蓝灯灭;
2024-11-17 10:03:54
1109
原创 STM32定时器输入捕获测量周期
使用的IO资源:1、定时器1的输出比较通道2,PA8输出2KHz,即周期500us,占空比250us的pwm信号2、定时器2的输入通道2,PA1接收此PWM,捕获通道2捕获周期3、串口3打印信息实现现象:1、串口打印PWM的周期数据,显示在串口助手。备注:1、如果使用软件清除CNT计数器则周期测量有1us误差;2、如果使用硬件清除CNT计数器则周期测量误差很小;仅提供输入捕获文件的代码,如下所示。
2024-11-15 10:17:32
636
原创 STM32定时器:PWM输入模式测量周期、脉宽
STM32F103C8T6,标准库,使用定时器2的通道2即PA1产生2KHz频率,250us脉宽的PWM信号,使用定时器1输入通道1即PA8接收这个PWM信号,捕获通道1捕获周期,捕获通道2捕获脉宽。使用串口3打印信息,显示到串口助手。只提供定时器PWM输入捕获驱动代码,如果需要完整代码,评论区私信。
2024-11-14 15:58:34
1690
原创 STM32定时器输出比较:PWM模式
使用标准库,配置STM32F103C8T6定时器1输出比较通道1和通道4,PWM模式的驱动。现象就是定时器1输出两路相同频率的PWM驱动LED呼吸灯。
2024-11-12 16:47:06
1360
原创 STM32外部中断
下图生动形象地说明了中断是什么意思。在STM32F10X用户手册的第九章有详细地叙述中断,表9.1.2中断和异常向量表,阴影部分是内核异常,其它的是外设中断优先级是指硬件默认优先级,数字越小级别越高;优先级类型,固定表示优先级不可在软件里设置;这个地址是四个字节的,用来保存中断服务函数的地址,也就是说RESET复位的地址0x0000 0004~0x0000 0007这四个字节里保存的就是函数名(地址)Reset_Handler。
2024-11-04 16:43:52
974
原创 解读STM32串口中断接收数据帧的驱动函数(上)
分析了串口中断接收数据,Gpio引脚初始化部分的函数,在底层究竟配置了那些寄存器,是如何实现配置操作的。
2024-11-02 16:41:32
1179
原创 使用简单的git指令管理代码
什么是Git工作目录,举个例子, 在桌面新建一个文件夹:GitTest。在文件夹内右键选Git Bash Here。输入指令git init创建本地版本库,git init此时在GitTest内会生成一个.git文件夹,那么在GitTest内除了.git的其它内容都是工作目录。
2024-10-19 17:33:40
1310
原创 Cortex-M3及以上32单片机使用内核DWT实现微秒级延时
Cortex-M3及以上32单片机使用内核DWT实现微秒级延时的详细说明和代码实现。
2024-10-17 22:42:38
3488
原创 STM32无法烧录程序,出现Flash download failed - Target DLL has been cancelled
如果你是使用的STM32cubeMax自动生成代码,并且你的板子之前都可以正常烧录程序,但是就在烧录了STM32cubeMax自动生成的代码,你的板子无法再使用jlink或者ST-link烧录程序了,那么极有可能是程序中隐藏了一条代码关闭了SW和JTGD调试。①BOOT0拉低(BOOT0下拉从FLASH启动),点击KEIL的DOWNLOAD前先按下板子上的复位键不放,然后。之后你的板子就可以正常使用jlink或stlink等烧录程序了。(2)之后你需要想办法把你修改过的代码烧进你的板子里。
2024-09-28 03:59:08
2013
1
原创 51单片机学习记录-数据类型的数值范围导致的错误
B站学习江协科技51单片机P18节;Keil5编程Debug一直得不到正确结果;错误有关C语言数据类型的表示范围。
2024-04-01 20:43:56
312
1
Ubuntu,apt-get update更新失败
2023-12-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅