
单片机C语言
文章平均质量分 53
一只鲲
这个作者很懒,什么都没留下…
展开
-
单片机的FMC 【使用方法2】- FMC模拟并口时序
LCD并口时序图某34pinLCD引脚图,内部驱动为S6B33B2通过对比可以看到8080时序除了RS线其它的和FSMC很像。FSMC-NOR flash和8080信号线按照下面方式对接8080接口的RS可以和FSMC任何一个地址线A连接,这样高电平时数据线D就会被数据成数值,低电平时就会被处理成命令。如何让A0为确定的电平呢,只需向FSMC的地址线上发送奇数,A0就是高电平。向FSMC地址线上发送偶数,A0就是低电平。原创 2023-07-16 00:16:58 · 1785 阅读 · 0 评论 -
单片机的FMC外设【超级详细的使用方法1】
FMC是存储器控制器,它能自动产生控制存储器的逻辑时序,有了它就不用自己去写复杂的控制时序。FSMC和FMC的区别是什么?FSMC的功能比FMC少了一个功能,就是FSMC只支持静态,不支持动态。FMC是一个片上外设,类似I2C,SPI之类的外设,所以要用它就要知道它的引脚分布,哪些引脚有FMC功能。下面以都STM32F407为例如下所示的FSMC的地址线,数据线,控制线。原创 2023-07-15 23:26:11 · 3412 阅读 · 0 评论 -
STM32 库函数 CAN结构体
STM32单片机HAL库函数CAN结构体原创 2023-01-12 19:40:19 · 3511 阅读 · 2 评论 -
STM32 CAN 库函数
CAN库函数看似很多,但同时用到的就几个。原创 2023-01-12 19:29:53 · 2241 阅读 · 0 评论 -
CAN波形时序解析
(2) 接收单元的工作在接收数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个位)再接收。(1) 发送单元的工作在发送数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。仲裁段包括:11位基本ID、1位SRR、1位IDE、18位扩展ID、1位RTR。总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。第二位是应答界定符,是一个必须为“隐性”的位。原创 2023-01-12 19:06:04 · 6759 阅读 · 4 评论 -
4 freertos任务管理
四 freertos任务管理一 任务创建函数使用函数: xTaskCreate 用于任务的创建,并且还可以自定义任务栈的大小。函数原型:BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, /* 任务函数 */ const char * const pcName, /* 任务名 */ unsigned short usStackDepth, /* 任务栈大小,单位 word,也就是 4 字节 */原创 2022-01-02 17:26:45 · 501 阅读 · 0 评论 -
Cortex-M 内核中断屏蔽寄存器组描述
Cortex-M 内核中断屏蔽寄存器组描述 名字功能描述PRIMASK这是个只有单一比特的寄存器。 在它被置 1 后,就关掉所有可屏蔽的异常, 只剩下 NMI 和硬 FAULT 可以响应。它的缺省值是 0,表示没有关中断。FAULTMASK这是个只有 1 个位的寄存器。当它置 1 时,只有 NMI 才能响应,所有其它的 异常,甚至是硬 FAULT,也通通闭嘴。它的缺省值也是 0,表示没有关异 常。BASEPRI这个寄存器最多有 9 位( 由表达优先级的位数决原创 2021-12-18 11:30:53 · 839 阅读 · 0 评论 -
[FreeRTOS笔记1] STM32CubeMX FreeRtos错误
STM32CubeMX FreeRtos错误在检查错误前一定要有FreeRTOSConfig.h文件错误1HAL库用AC6编译器../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM3/port.c(208): error: expected '(' after 'asm'__asm void vPortSVCHandler( void ) ^../Middlewares/Third_Party/FreeRTOS原创 2021-12-18 10:35:45 · 5559 阅读 · 1 评论 -
3 裸机移植FreeRTOS 源码
裸机移植FreeRTOS 源码1、在裸机工程目录下建一个文件夹FreeRTOS, (1)在新建的目录下建 src 和 port 文件夹 (2)把Source下的".c"文件复制到src。 (3)把"MemMang"和将要使用的编译器文件复制到 port。此处使用MDK就复制"RVDS"。 (4)直接复制"include文件夹"到FreeRTOS文件夹内。2、在编译器(MDK)里新建分组 (1)在开发环境里面新建 FreeRTOS/src 和 FreeRTOS/port 两个分组。原创 2021-12-18 09:17:26 · 752 阅读 · 0 评论 -
HAL库函数IIC
/** @defgroup I2C_XferOptions_definition I2C XferOptions definition * @{ */#define I2C_FIRST_FRAME 0x00000001U#define I2C_FIRST_AND_NEXT_FRAME 0x00000002U#define I2C_NEXT_FRAME 0x00000004U#define I2C_FIRST_A原创 2021-12-17 14:18:26 · 928 阅读 · 0 评论 -
C语言队列-FIFO
C语言队列-FIFO原创 2021-12-03 11:04:08 · 1119 阅读 · 0 评论 -
C语言环形队列缓冲-FIFO_RingBuffer
C语言环形队列缓冲-FIFO_RingBuffer原创 2021-12-03 11:02:10 · 1708 阅读 · 1 评论 -
硬件I2C-三种方法,阻塞,中断和DMA的EEPROM测试
HAL库硬件I2C-三种方法,阻塞,中断和DMA的EEPROM测试原创 2021-12-02 16:21:40 · 5341 阅读 · 1 评论 -
一个DMA向4个PWM的通道传输数据
一个DMA向4个PWM的通道传输数据定时器的通道一定要配置成**PWM生成通道**才可以,配置成 生成PWM不输出 在程序中是开启不了的。DMA配置:循环发送,连续不断的向外发送,只需初始化时开启一次。外设地址增加,4个通道内存地址增加,4个数据/* TIM3 DMA Init */ /* TIM3_CH1_TRIG Init */ hdma_tim3_ch1_trig.Instance = DMA1_Channel6; hdma_tim3_ch1_trig.原创 2021-12-02 10:29:34 · 1062 阅读 · 1 评论 -
单片机C语言GRB888和RGB565和RGB666的互相转换
GRB888转RGB565RGB565用了2个字节,排列方式如下:RGB888 用了4个字节,把上面的RGB565转换后,排列法方式如下:RGB565转换成RGB888时,只需将RGB565的颜色拿过来放进RGB888的高位,RGB888的低位补0,所以16位色转换成24位色时精度不会提高。反过来,RGB888转换RGB565时,R的高5位,G的高6位,B的高5位拿过来放进RGB565,所以24位色转换成16位色会损失精度。RGB的 0xFFFF 转换成RGB888后为 0xF8FCF8,如下原创 2021-10-04 22:47:36 · 5315 阅读 · 0 评论 -
记录-浮点导致程序乱跑
浮点数导致程序跑飞:计算时整数转换成浮点数,赋值后程序乱跑,现象为,本函数内没有用到的全局变量被修改掉,中文显示变成英文。需要赋值前再转换成整数即可。形如:u16 d;u8 a,b;float e;d= a+(float)(b+c)+0.5/25;改为:d= a+ (u16)((float)(b+c)+0.5/25 );...原创 2021-09-24 11:31:17 · 275 阅读 · 0 评论 -
STM32 HAL库函数USART、DMA和几个嘎达马西的说明
[单片机]STM32 HAL库函数USART、DMA和几个嘎达马西的说明STM32f103SPI1_NSS/USART2_CK是同一个管脚usart2同步通讯时和SPI1的NSS冲突PWMTIM_OCMode_Timing是在比较成功后不在对应输出管脚上产生输出。TIM_OCMode_Toggle是在比较成功后翻转对应输出管脚上的电平。TIM_OCMode_Active 输出比较主动模式 (匹配时设置输出引脚为有效电平,当计数值为比较/捕获寄存器值相同时,强制输原创 2021-09-24 11:04:15 · 1205 阅读 · 0 评论 -
[单片机]STM32 Flash寄存器
[单片机]STM32 Flash寄存器● FPEC key register (FLASH_KEYR)● Option byte key register (FLASH_OPTKEYR)● Flash control register (FLASH_CR)● Flash status register (FLASH_SR)● Flash address register (FLASH_AR)● Option byte register (FLASH_OBR)● Write protection原创 2021-09-24 10:52:52 · 1503 阅读 · 0 评论 -
DMX协议和RDM协议
DMX协议和RDM协议1 DMX协议1、 DMX512协议特点:(1)采用RS-485总线收发器,差分电压进行传输的,抗干扰能力强,信号可以进行长距离传输;(2)不论调光数据是否需要改变,主机都必须发送控制信号。(3)由于数据帧之间的时间小于1s,所以在1s内没有收到新的数据帧,说明信号已经丢失;(4)因为是数据是调光用的,使用环境是不做安全要求的设备, 并且是不间断传输的,所以不需要复杂的校验。2、 波特率:250000一个bit位 4us8个位(Slot:x) 4*8=32us,x原创 2021-09-24 10:44:23 · 12503 阅读 · 3 评论 -
STM32 跳转系统BootLoader
STM32 跳转系统BootLoaderSTM32 进入系统 bootLoader 主要有两种方法:(1)一种是设置 boot 引脚,进入系统 bootLoader。(2) 一种是应用程序跳转到系统 bootLoader。串口1配置如下:使用LL库可以使生成的代码能小一点。GPIO使用HAL库可以打开HAL库定义,如果使用Flash库函数时就要打开HAL库,因为flash没有LL库。boot.c源码如下:#include "main.h"#include "boot.h"#d原创 2021-09-24 09:32:26 · 6996 阅读 · 10 评论 -
BootLoader和App1和App2三个程序之间的跳转
BootLoader和App1和App2三个程序之间的跳转目录:BootLoader和App1和App2三个程序之间的跳转1 、说明:2、跳转程序:3、BootLoader程序(1)配置地址和大小4、App1程序(1)程序(2)配置地址和大小(3)程序现象5、APP2程序(1)程序(2)配置地址和大小(3)程序现象6、综述1 、说明:三个程序是(1)BootLoader 亮两个LED灯,1秒后进入App1.(2)app1 LED1闪烁,长按按键后进入App2.(3)app2 LED2闪烁,长按按原创 2021-08-05 20:06:33 · 4555 阅读 · 0 评论 -
用MDK调用脚本在生成hex文件名后面增加时间
用MDK调用脚本在生成hex文件名后面增加时间编辑如下脚本@echo offecho ++++++++++++++++++++++++++++++++++++++echo %date:~0% %time:~0,-3%set yy=%date:~0,4%set mm=%date:~5,2%set dd=%date:~8,2%set h=%time:~0,2%set m=%time:~3,2%REM set s=%time:~6,2%SET n=%yy%-%mm%-%dd%_%h%-原创 2021-04-15 16:19:43 · 412 阅读 · 0 评论 -
BAT脚本在文件后面增加修改时间
BAT脚本在文件后面增加修改时间① 时间和日期REM @echo offREM echo ++++++++++++++++++++++++++++++++++++++echo %date:~0% %time:~0,-3%显示如下:②把“/”去掉,换成“-”set yy=%date:~0,4%set mm=%date:~5,2%set dd=%date:~8,2%set h=%time:~0,2%set m=%time:~3,2%set s=%time:~6,2%SET n=原创 2021-04-15 15:52:53 · 3734 阅读 · 0 评论 -
单路D触发器做自锁开关
1. 单路D型触发器如图2. 功能图3.引脚信息4.真值表5.仿真原理图,单路D触发器只有一个D和Q,无Q‾\overline{\text{Q}}Q,仿真图中无单路用多路代替。1.初始上电状态2.按按键原创 2021-04-12 15:38:14 · 6085 阅读 · 0 评论 -
DMX512协议解析
1、 DMX512协议特点:(1)采用RS-485总线收发器,差分电压进行传输的,抗干扰能力强,信号可以进行长距离传输;(2)不论调光数据是否需要改变,主机都必须发送控制信号。(3)由于数据帧之间的时间小于1s,所以在1s内没有收到新的数据帧,说明信号已经丢失;(4)因为是数据是调光用的,使用环境是不做安全要求的设备, 并且是不间断传输的,所以不需要复杂的校验。2、 波特率:250000一个bit位 4us8个位(Slot:x) 4*8=32us,x是从1到512如图:3、下面是一帧数原创 2021-04-02 18:38:11 · 10975 阅读 · 1 评论 -
NRF24L01 无线模块数据
NRF24L01 无线模块0、概述(1)2.4G 全球开放的 ISM 频段(2)最高工作速率 2Mbps,高校的 GFSK 调制(3)125 个可选的频道(4)内置 CRC 检错和点对多点的通信地址控制。(5)低工作电压(1.9~3.6V)。(6)可设置自动应答,确保数据可靠传输。1、 VCC 脚的电压范围为 1.9~3.6V 除了 VCC 和 GND 脚,其他引脚都可以和 5V 单片机的 IO 口直连在接收模式下可以同时接收六个发送端信息,因为其内部有六个通道,发送模式下只.原创 2021-04-02 14:53:07 · 896 阅读 · 0 评论 -
一个if括号里的条件判断太多,改变方法
1.并列关系,可以用两种方法 if(0xF0 ==rx_buf[0]&&0xF0 ==rx_buf[1]&&0xF0 ==rx_buf[2]&&0xF0 ==rx_buf[3]&&0xF0 ==rx_buf[4]&&0xF0 ==rx_buf[5]) { About(); }(1). 拆分成几个if,还是太长,用第二种方法 { if(0xF0 ==(rx_buf[0]&0xFF) &&a原创 2021-04-02 13:56:36 · 3310 阅读 · 0 评论 -
EC11数字电位器使用方法,利用定时器的编码(Encoder)模式
EC11数字电位器使用方法,利用定时器的编码(Encoder)模式1. 硬件连接PB6 ------> TIM4_CH1 EC11_A_PinPB7 ------> TIM4_CH2 EC11_B_Pin2.定时器配置(1)寄存器配置分频(PSC): 5自动装载值是30,扭动电位器旋钮,往上加到30后又从0开始。输入滤波是4。(2)开中断(3)引脚的标签3. 生成4. 中断函数void EC11_Init(){ // HAL_原创 2021-04-02 11:12:30 · 3124 阅读 · 1 评论 -
const指针,不管在类型的前后,只要在星号前面意思就一样
const不管在类型的前后,只要在星号前面意思就一样。 int const *p; 等价 const int *p;原创 2021-03-06 19:31:06 · 226 阅读 · 0 评论 -
字节对齐
字节对齐char 1个字节int 4个字节如下: C表示 char I表示 int4字节对齐: C I CCI CIC CXXXIIII CCXX IIII CXXX IIII CXXX ```原创 2021-03-06 19:23:09 · 128 阅读 · 0 评论