目录1、引言2、计算步骤3、代码的实现(计算法)4、代码的实现(查表法)5、在线CRC校验网址(1)链接(2)链接1、引言(1).CRC寄存器初始值为0xFFFF;即16个字节全为1。(2).CRC-16/ModBus的模型为:X16+X15+X2+1,由于16进制数只能0~15位,所以舍去X16位,最后得出:0x8005H(1000000000000101B)。(3).通过把0x8005H的“高位”与“低位”进行互换,得到最终的多项式:0xA001H(1010000000000001B)。2、计算步骤(1).预置16位寄存器为十六进制0xFFFF(即全为1),称此寄存器为CRC寄存器;(2)
串口发送/接收函数HAL_UART_Transmit();串口发送数据,使用超时管理机制 HAL_UART_Receive();串口接收数据,使用超时管理机制HAL_UART_Transmit_IT();串口中断模式发送 HAL_UART_Receive_IT();串口中断模式接收HAL_UART_Transmit_DMA();串口DMA模式发送HAL_UART_Transmit_DMA();串口DMA模式接收串口中断函数HAL_UART_IRQHandler(UART_HandleTypeDef*huart); //串口中断处理函数HAL_UART_TxCpltCallback(UART_H
只需将蓝牙连到单片机上,使用usart3(PB10、PB11)作为蓝牙和单片机的数据传输,而电脑的收发数据要是用usart1(PA9、PA10),将数据存入数组中,从而在串口助手中打印值 1.下面是usart.c文件,将io口和串口初始化,并且加入中断(其中电脑发送时,所用的中断需要回车换行,正常情况下,直接数据存入寄存器,将数据存放在数组中(参考下面usart3的中断))#include"sys.h"#include"usart.h" //加入以下代码,支持printf函数,而不需要选择useMicroLIB #if1#pragmaimport(__use_no_semihost
文章目录1.ringbuffer简单介绍2.ringbuffer的代码实现2.1ringbuffer数据结构定义2.2ringbuffer初始化2.3ringbuffer写数据2.4ringbuffer读数据3.在串口中使用ringbuffer3.1为什么需要ringbuffer接收串口数据3.2初始化串口和ringbuffer3.3串口中断接收数据4.测试结果4.1测试是否丢包4.2补充测试1.ringbuffer简单介绍环形缓冲区(ringbuffer),实际上就是一种队列数据结构,只不过它不是线性队列,而是环形队列。关于环形缓冲区(ringbuffer)的详细介绍,网上一搜一大把,这里不
原文(本人转载):帆登小站-SD卡SPI模式操作(1)初始化SD卡作者是初学者,水平有限,本文仅作为个人学习笔记使用,不能保证内容的正确性。部分资料来源于网络,参考了SD卡协议2.0手册等资料,如果有歧义,可以与作者联系。目录SD卡SPI模式操作(1)初始化SD卡SD卡SPI模式操作(2)读操作SD卡SPI模式操作(3)写操作省流直接看图,文章下面有比较详细的初始化流程常见问题1、为什么发送初始化命令之后,SD卡一直返回0xFF?作者亲自遇到过这个问题,我的工具是某宝上十几块钱的逻辑分析仪,芯片是CH32V203C8T6,开发板长这样子的首先检查线路的连接,MCU的MISO连接SD卡的DO,M
我一直在尝试从PHP获取crc32函数以匹配javascript生成的结果。我浏览了在网上找到的4个不同的javascriptcrc32库(1、2、3、4),它们都适用于ascii,但是当你向它抛出utf8字符时,所有四个js库都输出相同的错误答案。Thisoldstackoverflowquestion似乎是最接近的答案,但在我的测试中仍然不起作用。例如:php:crc32('tést')=727386373javascript:crc32.genBytes('tést')=3109344618为方便起见,这里是最紧凑的版本。functionstringToBytes(str){va
在板子上有两个555定时器,可以做成信号发生器,利用定时器输入捕获功能可以检测出,信号发生器的所产生脉冲信号的频率和占空比。定时器的输入捕获有两个功能,直接捕获模式和间接捕获模式;直接捕获:只能捕获本身通道的脉冲信号;间接模式:可以捕获此定时器每个通道的脉信号。操作思路:捕获频率:初始化定时器基础,开启定时器,开启定时器输入捕获上升沿中断,定时器一直计数,直到,捕获到上升沿说明过了一个周期,读取计数值,读取完然后清零,等待读取下一个周期,乘以时钟频率,就是周期,然后计算PWM频率。捕获占空比:利用此定时器的另一个通道,作为间接捕获模式,读取下降沿,产生下降沿中断,读取此定时器的
前段时间在做平衡车,需要移植MPU6050程序。但是在网上找了挺多相关例子的,但是有时候一步步跟着做,结果还是一堆errors或者读不出数据来,最后自己花了些时间,终于移植好了,前来分享一下。先分享我的工程,和需要移植的MPU6050的程序完整工程+MPU6050移植程序提取码:3ycr效果演示接下来进入正题:一、首先在CubeMX中创建工程1.先正常配置RCC、SYS和时钟树。2.我这里选择PB6和PB7读MPU6050用、打开了串口1、并且我打开了4个脚给OLED用。3.然后生成工程好了。二、程序移植1.我们把下载到的MPU6050程序添加到工程中,加入.c文件,并且把头文件路径也添加进来
振动(敲击)传感器振动无处不在,有声音就有振动,哒哒的脚步是匆匆的过客,沙沙的夜雨是暗夜的忧伤。那你知道理科工程男是如何理解振动的吗?今天我们就来讲一讲本节的主角:最简单的机械式振动传感器。下图即为振动传感器,外形有几种,原理都相同:1个弹簧电极+1个金属电极,振动时弹簧抖动碰到紧挨的金属电极,两个电极就会瞬间接通。我们通过单片机监测两电极的通断就可以知道当前是否发生振动,振动的频率是多少。原理就这么简单,准备上手! 一、硬件准备振动传感器1个,0.85元。STM32F103核心板一块,某宝7块9。供电线跟你的手机充电线一样。面包板套件一套,某宝13.8元。不买套件,随手弄几根杜邦线也OK。仿
文章目录前言一、本地环境二、开始1.定时器配置2.引脚配置3.内部时钟配置4.ADC参数配置4.代码生成3.编译工程4.添加功能代码4.ADC的DMA配置前言记录一下STM32CubeMX的学习笔记,同时分享给初学的小白,希望一起进步。如何使用STM32CubeMX以及工程创建在之前的博客有提到,这里就直接从ADC配置讲起。一、本地环境编译环境:KEIL代码生成:STM32CubeMX库:HALMCU:STM32F072二、开始1.定时器配