摘要:
一 工程习惯 ①必须模块化编程-一个功能一个CH分开,一个对象一个结构体; ②习惯使用bsp.c/bsp.h,BSP板级支持包源文件; ③多使用#define 来定义IO口与硬件相关特性,方便修改; 二 实际应用 模块化编程起始比较看实际使用场合, 这个和板级支持包有相同特性,使用时可以结合使用,硬 阅读全文
摘要:
初始化: 引脚配置--上拉或下拉输入模式根据实际电路 GPIO_Init() 选择中断线 GPIO_EXTILineConfig() 中断线配置与使能 EXTI_Init() 清除标志 EXTI_ClearITPendingBit() 中断优先级配置 NVIC_Init() 中断服务函数: 中断线确 阅读全文
摘要:
void TIM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_A 阅读全文
摘要:
[转载]2017年12月4日14:48:29 先描述下这几天碰到的一个奇怪的问题: 先描述下这几天碰到的一个奇怪的问题: 一个基于stm32的工程中使用到了IAP编程,其中boot空间预留长度为0x6100,实际boot的bin文件大小为21.1KB,具体为21633Byte.我在最开始调试时对于I 阅读全文
摘要:
Stack_Size的值根据你程序中局部变量最大尺寸计算,Heap_Size的值如果程序中没有用到动态内存malloc就默认不用管 阅读全文
摘要:
定义一群接口一样的函数,使用联合体结构体函数指针; 阅读全文
摘要:
1 总结下 结构体位域的使用 比如 则 struct _COM2 { u8 Len : 1;//低位 u8 EoN : 2; u8 Stop:1; u8 Bps:4;//高位 } union COM { u18 data; struct _COM2 COM2; }; 测试可用: 阅读全文
摘要:
Modbus 有ASCII和RTU 两者是通信协议,不同点就是 ASCII: 数据传输时 一个需要把 一个字节数据的 高4位和第四位 分别处理成ASCII码再分成两个数据进行传送;( 有与上位机进行通信的就需要使用这样的MODBUS ) RTU: 数据传输时,字节把字节数据进行传输;( 不用与上位机 阅读全文
摘要:
(1)连接两个表达式为一个表达式 for(ux=0,uxt=1;uxt<444;ux++,uxt++) 允许通过编译;他可以给FOR循环更多的初始化值; (2)一般定义的话要区别只有 字符数组 没有对最后一个数据的要求,而字符串最后一个数据是'\0’; char str1[11] = {'h','a 阅读全文
摘要:
#undef 与 #defined 反,实际使用中较多的是当你需要使用自己定义的标准C里面已经的函数时可以这样操作; exit(0)和exit(1)是系统判断函数是否有正常的退出,一般0表示正常的退出; 阅读全文
摘要:
整形转格雷码 x= (x>>1)^x 格雷码转整形(3种方法) staticunsignedint GraytoDecimal(unsignedint x) { unsignedint y = x; while(x>>=1) y ^= x; return y; } s 阅读全文
摘要:
在使用keil开发STM32应用程序时,点击Build后在Build Output窗口中经常会有如下信息:<ignore_js_op> 以前一直好奇这几个参数和实际使用的STM32芯片中Flash和SRAM的对应关系,于是上网搜了一圈,做如下总结: 这些参数的单位是Byte 图中几个参数分别代表 C 阅读全文
摘要:
用DMA内存到内存的模式,直接把Gpio_data的数据循环的搬到GPIOC的BSRR寄存器上来控制GPIOC上电平的翻转,这样使得GPIO的速度达到了最快,输出70ns的脉宽,这已经是达到了DMA总线带宽的极限,要想再提高速度的话,就得提高STM32芯片的主频。 这段没看没想到,一看到就觉得简单。 阅读全文
摘要:
1、低频电路对于模拟地和数字地要分开布线,不能混用 2、如果有多个A/D转换电路,几个ADC尽量放在一起,只在尽量靠近该器件处单点接地,AGND和DGND都要接到模拟地,电源端子都要接到模拟电源端子; 3、数字电路和模拟电路在同一块多层板上时,模拟地和数字地不需要排到不同的层上,但模拟电路和数字电路 阅读全文
摘要:
1、精度稳定低一点参考电压VREF稳定; 2、通过设置不同的ADC时钟 和 采样周期 来确定出最适合自己系统的参数; 3、测试思路: 在同样SMPx下,设定不同的时钟得到不同采样时间值; 在同样时钟下,更换SMPx(采样周期值)得到不同采样时间值; 比如:设定56MHZ的时钟不分频,一次1US,SM 阅读全文
摘要:
之前自己做过一个项目的低功耗大约11ua,那时总结下有几点: 1、外设时钟必须切换为内部时钟; 2、不用的外设全部关闭,要用再开就是了; 3、浮空引脚必须配置为下拉; 4、硬件上的上拉、下拉电阻切记不能随便加,使用到的外围芯片也要注意功耗问题; 5、对进入低功耗有好几种情况可以选择(睡眠、停机、待机 阅读全文
摘要:
1、空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断; 2、空闲中断是接收到一个数据以后,接收停顿超过一字节时间 认为桢收完,总线空闲中断是在检测到在接收数据后,数据总线上一个字节的时间内,没有再接到数据后发生。也就是RXNE位被置位之后,才开始检测,只被置位一次 阅读全文
摘要:
浮空,顾名思义就是浮在半空,输入直接与寄存器挂钩; 开漏,输出0的时候 PMOS管导通IO输出Vdd,输出1的时候 NMOS管导通IO输出Vss(Cmos场效应管); 推挽,输出时候电平确定,同样使用MOS管; 上拉、下拉:就是字面意思也可参考 http://www.cnblogs.com/luck 阅读全文
摘要:
1、仿真查看外设的寄存器状态;(时钟、端口配置、通道配置、) 2、检查使用到的端口配置;(时钟、端口配置) 3、检查硬件上的支持; 阅读全文
摘要:
硬件图上的上拉下拉: 没有触发时默认接到IO的是高电平就是上拉; 没有触发时默认接到IO的是低电平就是 下拉; (2)对应GPIO的配置 配置与你的外围电路息息相关; 比如下图: 你只能配置为上拉: A低电平--三极管截止--输入高电平; A高电平--三极管导通--输入低电平; 你不配置上拉就会导致 阅读全文
摘要:
独立看门狗:(使用内部 40Khz来计数 的溢出复位器,系统死了还会继续计数,计数到达0后进行复位,定时喂狗(重新装载计数值)就不会产生中断了) IWDG_Init(4,500); 步骤 (1)取消写保护: IWDG->KR = 0x5555; (2)设置独立看门狗的预分频系数和重装载值 : IWD 阅读全文
摘要:
UCOSII 是一个可以基于 ROM 运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统(RTOS)。为了提供最好的移植性能, UCOSII 最大程度上使用 ANSI C 语言进行开发,并且已经移植到近 40 多种处理器 阅读全文
摘要:
还记得51独有位操作,以一位(BIT)为数据对象的操作?可以简单的将P1口的第2位独立操作。P1.2=0;P1.2=1 ; 既可以把P1口的第三个脚(BIT2)置0置1。 而现在STM32的位段、位带别名区就为了实现这样的功能。 1、 支持的对象有:SRAM 和 I/O外设空间。实现对这些地方的某一 阅读全文
摘要:
在单片机中嵌入操作系统的利弊 摘要:近年来,在单片机系统中嵌入操作系统已经成为人们越来越关心的一个话题。本文通过对一种源码公开的单片机嵌入式实时操作系统μC/OS-II为例,阐述了在单片机中使用该嵌入式操作系统的优缺点,以及在应用中应当注意的一些问题。 关键词:实时操作系统;μC/OS-II;单片机 阅读全文
摘要:
作者:珵旭媛 下载对应版本的UCOSII https://www.micrium.com/downloadcenter/,你会少修改很多东西; 下载下来后是这样的文件夹,并且Software里面的才是主要用到的; 2、根据个人习惯,建立一个基础 STM32F1模板,运行测试通过口,添加一个UCOS文 阅读全文
摘要:
#include <stdio.h> int Add(int x,int y);float Sub(float x,float y);float Mul(float x,float y);float Exc(float x,float y); int (*pMathAdd)(int x,int y) 阅读全文
摘要:
以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。 这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当浪费时间和香烟的过程。 于是,我有了将库编译成lib文件的想法。本博文就是我将STM32F4的标准库编译成 阅读全文
摘要:
一、指针数组与指针数组 1,指针数组 顾名思义,即一个元素全部是指针的数组,其形式与普通数组相似,形式如 *a[N]。 在理解指针数组的使用方式前,我先来说下我个人对数组的理解。 比如一维整形数组(形如int a[3]),其实是一个具有3个整形元素的变量;二维整形数组(形如int a[4][3]), 阅读全文
摘要:
进程/线程同步的方式和机制,进程间通信 一、进程/线程间同步机制。 临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数 阅读全文
摘要:
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。 1. 计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。 2. 假定工厂的电力有限,一次只能供给一个车间使 阅读全文
摘要:
大家奉上一篇关于PID算法及参数整定的知识! 1.位置表达式 位置式表达式是指任一时刻PID控制器输出的调节量的表达式。 PID控制的表达式为 式中的y(t)为时刻t控制器输出的控制量,式中的y(0)为被控制量没有偏差时控制器输出的控制量。 由于计算机进入了控制领域。人们将模拟PID控制规律引入到计 阅读全文
摘要:
经常有人会问到PID的用法,今天小编在这里例举温度控制中的PID部分,希望能够把PID的具体应用说明白。 先说几个名词: 1.直接计算法和增量算法:这里的所谓增量算法就是相对于标准算法的相邻两次运算之差,得到的结果是增量,也就是说,在上一次的控制量的基础上需要增加(负值意味着减少)控制量,例如对于可 阅读全文
摘要:
PID调节器从问世至今已历经了半个多世纪,在这几十年中,人们为它的发展和推广作出了巨大的努力,使之成为工业过程控制中主要的和可靠的技术工具。即使在微处理技术迅速发展的今天,过程控制中大部分控制规律都未能离开PID,这充分说明PID控制仍具有很强的生命力。 PID控制中一个至关重要的问题,就是控制器三 阅读全文
摘要:
普及: 不同位置启动首需要硬件上的配合:BOOT1与BOOT0 引脚电平配合,一般默认使用主闪存存储; 也就是BOOT0 = 0; 启动时将现在起始模式的初始地址映射到了0x0000 0000,内部SRAM模式除外。 主存储块启动:0x0800 0000 或 0x0000 0000 系统存储 :0x 阅读全文
摘要:
以前一直使用STM32但是对 变量 或 函数 的存储域没做任何了解;只知道你需要存储的东西就放在Flash的后面几页就好了;这次接触到STM8发现编译器里面有特别的存储查看器就打算看看到底是怎么存储的 我用的芯片是 STM8S103K3T6C:8K FLASH 程序存储器,每页 64 字节,共 12 阅读全文
摘要:
【经验分享】KE02在IAR和KEIL中以常量形式初始化EEPROM值一, 经验分享描述 写这篇经验分享的原因是,之前有一个客户,他希望在KE02的芯片中,不要出现使用EEPROM操作命令的形式初始化EEPROM,但是需要芯片的EEPROM中就有他所规定好的数据,以便于程序直接调用。其实就把EEPR 阅读全文
摘要:
一、基础配置 硬件基础: 端口配置:波特率19200,9个数据位,1个停止位,使能校验控制,偶校验; 配置过程:(1)使能串口端口时钟,串口时钟,复用功能时钟; (2)复位串口端口配置DeInit,使能端口复用功能GPIO_PinRemapConfig (3)TX配置为--复用推挽输出,RX配置为- 阅读全文