嵌入式
一只笨鸟
勤能补拙,笨鸟先飞!
展开
-
C语言中位段实际运用
#include <QCoreApplication>//#pragma anno_unions //如果出现报错,共用体可能不支持匿名结构嵌套typedef union{ unsigned char BYTE; struct { unsigned char B0: 1; unsigned char B1: 1; unsigned char B2: 1; unsigned char B3: 1; .原创 2021-07-16 17:46:42 · 363 阅读 · 0 评论 -
2021-07-06
Keil MDK 编译器 AC5 和 AC6 优化选项重要内容和区别https://www.sohu.com/a/384927867_505803转载 2021-07-06 13:53:38 · 140 阅读 · 0 评论 -
有符号与无符号比较原理分析
今天空了又重温了一下C,针对之前强哥提的问题,我仔细想了下,举个例子:假如当前buff[1]=0111 1111B; buff[2]=1000 0000B;buff定义为char类型,一般系统隐含为signed char,执行buff[1] == ~buff[2]运算时,buff[1]由signed char自动转化为int,又因buff[1]符号位为0,则高位补0,结果为00000000 00000000 00000000 01111111B;buff[2]由signe...原创 2021-02-07 17:06:18 · 479 阅读 · 0 评论 -
关于STM32空闲中断极限时间
今天空了专门做了关于STM32空闲中断极限时间的实验,结果如下:115200, 1个字节理论用时:1/115200=8.68us,实测发送一帧数据的字节间延时超过大约173us时,则出现空闲中断,173/8.68=20字节;38400, 1个字节理论用时:1/38400=26us,实测发送一帧数据的字节间延时超过大约517us时,则出现空闲中断,517/26=20字节;9600, 1个字节理论用时:1/9600=104us,实测发送一帧数据的字节间延时超过大约2075us时,则出现空闲中断,20原创 2021-01-15 17:05:01 · 9077 阅读 · 9 评论 -
STM32F1基本定时器单次触发模式
之前在网上求助,没见到多少关于STM32定时器单次触发的代码,今天自测了下可行。只需要将TIMx_CR1的OPM置1即可。原创 2021-01-07 10:36:42 · 2527 阅读 · 0 评论 -
HAL库回调函数自定义版本注意问题
HAL库回调函数自定义版本void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){}如果未使用入参huart,会被编译器优化,仍然使用其__weak版本。注意哦!!!!原创 2020-12-24 16:19:27 · 418 阅读 · 1 评论 -
SPI读写函数寄存器版本(STM32F1xx,STM32F7xx实测完美)
void SPI_ReadWriteByte(SPI_TypeDef *spi,unsigned char *pTxData, unsigned char *pRxData, unsigned short Size)//寄存器版本{ volatile unsigned char tmpreg; unsigned short TxXferCount,RxXferCount; unsigned char *pRxBuffPtr = pRxData; unsigned char .原创 2020-12-07 15:30:34 · 1548 阅读 · 0 评论 -
MDK调试进入B .挂起时可能出现的问题
原创 2020-12-01 13:42:50 · 1154 阅读 · 2 评论 -
source insight3.5 相对路径(保证可行)
source insight 相对路径source insight项目移动到另外一个地方时,会因为之前是绝对路径而导致项目中的文件都不可用,需要重新把这些文件添加一遍。解决办法为创建项目时设定为相对路径。我的项目路径:方法为:1、创建source insight项目,在创建时设定为“项目文件有自己的配置文件”,点击 “确定”;2、不添加任何的项目文件,直接点“关闭”;3、在菜单“Project\Project settings”中修改“Project Source D原创 2020-10-23 16:06:19 · 1136 阅读 · 1 评论 -
教你怎样将RS422转成RS485接口
RS232接口是一种用于近距离(最大30-60米)、慢速度、点对点通讯的通讯协议,在RS232中一个信号只用到一条信号线,采取与地电压参考的方式,因而在长距离传输后,发送端和接收端地电压有出入,容易造成通讯出错或速度降低。RS485/422接口采用不同的方式:每个信号都采用双绞线(两根信号线)传送,两条线间的电压差用于表示数字信号。例如把双绞线中的一根标为 A(正),另一根标为B(负),当A为正电压(通常为+5V),B为负电压时(通常为0),表示信号“1”;反之,A为负电压,B为正电压时表示信号 “0”转载 2020-10-16 09:33:25 · 34341 阅读 · 0 评论 -
浮点数内存布局(精华版)
1.float和double的范围和精度(1)float和double的表示范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位)+8bits(指数位)+23bits(尾数位)double:1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位)(2)在数学中,特别是在计算机相关的数字(浮点数)问题的表述中,有一个基本表达法: (浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号)...原创 2020-10-15 17:04:53 · 1408 阅读 · 0 评论 -
STM32-硬件错误HardFault_Handler的处理方法(个人实战)
1、首先将startup_stm32f767xx.s(结合自己所使用的芯片MCU型号)栈和堆加大,测试是否还进入HardFault_Handler不;2、如果按照第1步处理后,仍然进入HardFault_Handler错误,则参照以下网址:https://blog.csdn.net/electrocrazy/article/details/78173558特别说明:stm32f7xx_it.c(结合自己所使用的芯片MCU型号)中的void HardFault_Handler(void).原创 2020-09-23 17:11:26 · 1147 阅读 · 0 评论 -
stm32查看代码运行时间[stm32f7xx]
1、初始化1个定时器TIM5_Init(-1,108-1);//arr为最大值(unsigned int)-1,让其一直往上加,最大值42亿us,即最大可表示4200秒,分频系数psc为108,即每+1等于1usvoid TIM5_Init(u32 arr,u16 psc){ TIM5_Handler.Instance=TIM5; //通用定时器5 TIM5_Handler.Init.Presca...原创 2020-07-16 15:17:31 · 3369 阅读 · 0 评论 -
串口接收中断的巧妙运用(基于KEA128,用于接收不定长数据帧)
//uart.cunsigned int uart_rx_with_to(UART_Type *uart_prt, unsigned char *pbuffer){ unsigned int i = 0; unsigned int len = 0; while (1) { if (uart_prt->S1 & UART_S1_...原创 2020-01-14 16:14:50 · 1303 阅读 · 2 评论 -
nRF51822看门狗实战运用
#include <stdbool.h>#include <stdint.h>#include "nrf.h"#include "nrf_delay.h"#include "nrf_gpio.h"#define LED0 (18)#define LED1 (19)#define RELOAD_COUNT (32768*5 - 1) // 5 se...原创 2020-01-08 17:12:19 · 753 阅读 · 0 评论 -
NRF51822和NRF52832的主要区别
NRF51822和NRF52832的主要区别对于NRF51822和NRF52832的选择性相信大家也是非常困惑的,哪个性价比高?下面为大家讲下NRF51822和NRF52832的一个区别,让大家能够更好的快速选型加快研发产品进度!主要分为五大要点:一、功耗方面:nRF52832更是在nRF51822的基础上简直将功耗降低了一半二、更好的RF体现,主要是发射功率和接纳...转载 2019-12-25 16:52:11 · 1282 阅读 · 1 评论 -
STM32串口通信原理及HAL库代码stm32f1xx_hal_uart.c阅读分析
原理性说明://参考网址:https://blog.csdn.net/u010561799/article/details/89526266在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空(单字节),另一个是TC=发送结束(多字节)。当USART_DR中的1字节...原创 2019-11-29 11:00:10 · 3278 阅读 · 1 评论 -
STM32的USART发送数据时如何使用TXE和TC标志【标准库】
http://bbs.21ic.com/icview-2514168-1-1.html转载 2019-11-28 09:07:21 · 645 阅读 · 0 评论 -
微处理器内存布局方面知识
51单片机程序程序存储空间(ROM)和数据存储空间(RAM)详解https://wenku.baidu.com/view/6cac6dbbafaad1f34693daef5ef7ba0d4a736d85.htmlSTM32F1(Cortex M3内核)存储器映射https://blog.csdn.net/fantastikman/article/details/73481021关于单片...原创 2019-03-19 13:47:45 · 496 阅读 · 0 评论 -
keil MDK编译完成后,Program Size: Code,RO-data,RW-data,ZI-data的意义
keilMDK编译完成后,ProgramSize:Code,RO-data,RW-data,ZI-data的意义转载 2016-02-12 15:27:07Program Size: Code=344 RO-data=252 RW-data=100 ZI-data=1024 看了多遍,总是忘,这次还是把它分析透了吧,若有不对的地方还请各位看官指正补充固定不变的代码存在ROM...转载 2019-03-19 11:31:12 · 987 阅读 · 0 评论 -
STM32片内FLASH操作
STM32学习笔记:读写内部Flash(介绍+附代码)https://www.cnblogs.com/pertor/p/9484663.html关于STM32像EPROM一样可以单字节写内部Flash的理解https://blog.csdn.net/xld_19920728/article/details/78928161STM32内部FLASH读写-通用https://blog.c...原创 2019-03-19 17:44:01 · 2307 阅读 · 0 评论 -
单片机中c语言 右移 和左移 与CY
单片机中c语言“右移>>和左移<<”与CY左移 <<0100 1111 << 左移一位:1001 1110CY=0;第一位跑到CY上,最后一位补0;在keil c51中,内部函数库INTRINS.H中_crol_(m,n)表示将m循环左移n位,第一位的跑到最后一位上。右移>> 1000 1111 >> 右移一位...转载 2019-03-03 18:08:19 · 14257 阅读 · 2 评论 -
单工、半双工及全双工之间的区别
1、单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。 2、半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。 3.全双工数据通信允许数据同时在两个方向上传输,因...转载 2019-03-03 09:59:58 · 31059 阅读 · 1 评论 -
STM32F103ZET6相关帮助资料汇总
串口:https://www.cnblogs.com/zengsf/p/7158919.htmlSPI: 绝对好文:https://blog.csdn.net/qq_33056691/article/details/76161591 https://blog.csdn.net/zxh1592000/article/details/78759736 h...原创 2019-02-26 18:36:53 · 1204 阅读 · 1 评论 -
STM32 初学不知道外设对应的APB1还是APB2
STM32 初学不知道外设对应的APB1还是APB2STM32参考手册搜索“系统架构”或者“系统结构”,即可查看外设挂在哪个时钟下,也就知道开启哪个时钟了。转载 2019-03-01 10:09:36 · 3418 阅读 · 1 评论 -
UBUNTU12.04 U盘挂载
ubuntu12.04 U盘挂载总结U盘挂载总结//delong指导,天龙,韩健整理0.注意要先切换root权限,ubantu命令sudo -s或者sudo su root都可以。退出则用exit 或 su [你的用户名],都可以。1.在插入U盘后,用fdisk -l查找设备名称,首先知道你的U盘多大,然后找到U盘,如下图。我的u盘叫做sdg.转载 2017-07-17 17:25:26 · 458 阅读 · 0 评论 -
linux 下串口编程VTIME和VMIN的设置
linux 下串口编程VTIME和VMIN的设置VTIME定义要求等待的时间量(取值不能大于cc_t)。VMIN定义了要求等待的最小字节数。options.c_cc[VTIME] = X; //设置从获取到1个字节后开始计时的超时时间options.c_cc[VMIN] = Y; //设置要求等待的最小字节数在原始模式下对read()函数的影响:1、X=0,转载 2016-09-13 15:32:32 · 534 阅读 · 0 评论 -
linux下对文件的读写操作
#include #include #include #include int main(int argc, char* argv[]) { char sz_str[] = "Hello, welcome to linux world!"; char sz_filename[] = "hello.txt"; int fd = -1;转载 2016-05-20 14:52:07 · 470 阅读 · 0 评论 -
关于Eclipse开发环境中编译器的设置
Eclipse PlatformVersion: 3.7.2Build id: I20110613-1736project-->properties,在C/C++build-->Tool Chain Editor,当current toolchain选择了Linux Gcc时,此刻C/C++build-->settings,tool settings默认是配置好了[有关原创 2016-05-20 10:25:57 · 20369 阅读 · 0 评论 -
qt-4.7下载地址
http://download.qt-project.org/archive/qt/4.7/原创 2016-05-27 16:46:06 · 1869 阅读 · 0 评论 -
STM32定时器配置(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,定时计数模式下总结
https://www.cnblogs.com/pertor/p/9488813.html转载 2019-04-15 16:45:17 · 8461 阅读 · 0 评论 -
USART_GetITStatus和USART_GetFlagStatus的区别
USART_GetITStatus和USART_GetFlagStatus的区别USART_GetITStatus()和USART_GetFlagStatus()的区别 都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。 ITStatus USART_GetITStatus(USART_Ty...转载 2019-04-25 19:44:51 · 2635 阅读 · 0 评论 -
NVIC_PriorityGroupConfig() 函数在每个工程中只需要配置一次
NVIC_PriorityGroupConfig() 函数在每个工程中只需要配置一次刚开始接触NVIC,看到每个例程在配置中断的时候,都用到NVIC_PriorityGroupConfig() 函数,来给优先级分组,会让人以为在配置每个中断时,都需要用这个函数,其实不用的。NVIC_PriorityGroupConfig() 函数在每个工程中只需要配置一次。如果整个工程均没有配...转载 2019-04-26 09:44:27 · 3803 阅读 · 0 评论 -
求将一个数的二进制位逆序算法
//输入1个字节,将其二进制位颠倒后,再输出1个字节//比如input:0110 0101 output:1010 0110uint8_t bit8_order_reverse(uint8_t ch){ uint8_t ch_new = 0; uint8_t bit_val = 0x80; uint8_t bit_val_reverse = 0x01; ...原创 2019-07-03 14:09:49 · 1143 阅读 · 0 评论 -
Keil官网下载软件开发包并安装
Keil官网下载packet:Keil官网首页里搜索芯片型号,比如:NRF51822,然后显示搜索结果,再在结果中点击MDK5 - Nordic Semiconductor nRF51822_xxAA,然后再点击"Device Family Pack"下面的"Download",将会下载.zip记得解压到C:\Keil_v5\ARM\PACK,可能还要细分目录,如果下载的是.pack文件,...原创 2019-07-02 10:29:02 · 4587 阅读 · 0 评论 -
STM32F10X创建新工程系统时钟设置注意事项
(1)STM32创建新工程时,最最重要的第一步就是要确定芯片外部晶振是多少,然后设置stm32f10x.h文件中的HSE_VALUE为外部晶振值;(2)设置系统时钟分频系数,在system_stm32f10x.c文件中,SetSysClockTo72()函数中,修改 【RCC_CFGR2_PREDIV2_DIV2 和 RCC_CFGR2_PLL2MUL8】 : RCC->CFGR2...原创 2019-05-23 14:14:46 · 342 阅读 · 0 评论 -
将STM32 iap hex文件与app hex文件合并为一个hex文件
日前公司产品需要增加远程升级功能,boot loader程序写好后交予生产部门使用时他们反馈每个产品程序需要刷写两次(一个boot loader 一个app程序),生产进度变慢浪费时间,于是乎研究如何将两个程序并为一个。参考:http://blog.csdn.net/yx_l128125/article/details/13591743 后成功实现了将两程序合并为一个。IAP +APP 结...转载 2019-05-24 11:50:51 · 752 阅读 · 0 评论 -
STM32中断一些概念(主要是外部中断与中断通道)
主要参考:startup_stm32f10x_hd.s,stm32f10x_exti.h,stm32f10x_exti.c,另外,这里说的外部中断是相对于M3内核之外的,主要是外设中断如:如I/O口相应的外接设备中断,USART、Timer等其它本身固件中断。 对于cortex_m3内核所支持的240个外部中断[__IO uint8_t IP[240];...转载 2019-04-25 17:32:49 · 7602 阅读 · 0 评论 -
keil软件仿真时遇到的问题汇总
一、软件仿真步骤设置:1.target-->XTAL晶振设置(STM32,8.0)2.Option->Debug->Use_Simulator3.Option->Debug Dialog DLL默认是DARMSTM.DLL Parameter默认是-pSTM32F103VC二.keil仿真时,会遇到程序停在 /*Wait t...转载 2019-05-04 19:29:46 · 8636 阅读 · 0 评论 -
ADC 与实际电压值的关系
ADC 与实际电压值的关系1.首先确定ADC用几位表示,最大数值是多少。比如一个8位的ADC,最大值是0xFF,就是255。2.然后确定最大值时对应的参考电压值。一般而言最大值对应3.3V。这个你需要看这个芯片ADC模块的说明。寄存器中有对于输入信号参考电压的设置。3.要计算电压,就把你的ADC数值除以刚才确定的最大数值再乘以参考电压值。 比如ADC值为0x80, 实际值就...转载 2019-04-19 13:50:13 · 7128 阅读 · 0 评论