![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
stm32
文章平均质量分 61
IT小生lkc
趁年轻,别仿徨
展开
-
stm32串口空闲中断+DMA传输接受不定长数据+letter shell 实现命令行
空闲中断(IDLE),俗称帧中断,即第一帧数据接收完毕到第二帧数据开始接收期间存在一个空闲状态(每接收一帧数据后空闲标志位置1),检测到此空闲状态后即执行中断程序。产生的条件是当清除空闲标志位后,必须有接收到第一个数据后,才开始触发,一旦接收的数据断流,没有接收到数据,即产生空闲中断。有些地方没写完,后续补上,里边操作系统是freertos,这个不是必须的。串口空闲中断在串口无数据接收的情况下,是不会产生的,一定要有串口电路,TTL转串口电路,串口接线正常。初始化完成清空串口缓冲区,保证无初始化乱码。原创 2023-03-19 23:37:46 · 5247 阅读 · 1 评论 -
串口 常见问题
轮询可能因为其他业务占用cpu太多时间,导致无法一次性接受全字符串,有的缓冲区例如新塘可能有16字节缓冲,一单其他业务占用太多cpu就会出现只能接收16字节数据的现象,其他字节丢了。例如你先使能发送是en,然后发送,如果发送速度慢你立马 再使能了接受,就可能导致发不全甚至发不出去,同理接收,主要是时序的问题。之前用过一个命令行,然后你发送东西就会回显出来,最终定位是因为串口初始化之后最好要清空一下接收缓冲区。注意:rs485接线好像是 rx接rx tx接tx。7. 每次重启,概率性会存在串口乱码。原创 2023-01-08 20:36:58 · 229 阅读 · 0 评论 -
C语言 弱定义
前期移植代码,需要调用某个接口fun,但当前该接口不存在或者未移植完整使用,可以使用weak关键字定义为空函数先保证编译正常。原创 2023-01-08 19:59:32 · 3605 阅读 · 0 评论 -
【单片机】独立看门狗IWDG初始化
此器件具有两个嵌入式看门狗外设,具有安全性高、定时准确及使用灵活的优点。两个看门狗外设(独立和窗口)均可用于检测并解决由软件错误导致的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持 工作状态。窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗 口来检测应用程序非正常的过迟或过早的操作。原创 2022-11-20 22:54:00 · 1231 阅读 · 0 评论 -
【单片机】新建工程stm大量报错
可以看到大量的基础变量没有定义主要是,一定要添加这两个stm32f4xx_conf.hstm32f4xx.hUSE_STDPERIPH_DRIVER,STM32F40_41xxx原创 2022-11-19 11:07:43 · 299 阅读 · 0 评论 -
【单片机】唯一设备ID UID固件加密
唯一设备标识符最适合:● 用作序列号(例如 USB 字符串序列号或其它终端应用程序)● 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性● 激活安全自举过程等96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。96 位的唯一设备标识符也可以以单字节/ 半字 / 字等不同方式读取,然后使用自定义算法连接起来。原创 2022-10-29 09:32:04 · 3178 阅读 · 0 评论 -
FreeRTOS实时操作系统系统移植(常见问题,基础总步骤)
1.下载FreeRTOS官网:https://freertos.org/下载FreeRTOS最新版:(直接下载relese版就可以了)https://freertos.org/a0013.04.html2.创建工程新建工程文件夹:建立3个文件夹FreeRTOS:存放内核PROJECT:工程文件USER:main.c文件新建keil工程(选择文件夹PROJECT):选择内核和启动文件(普通创建keil工程一样)点击上边的新建文件,就是三个红绿原创 2021-08-08 10:01:45 · 8472 阅读 · 6 评论 -
【lwip】 网卡动态更新ip、网关、掩码(不重启前提)
/* 函数功能:给指定网卡更新ip 掩码 网关 (不需要更新的还是原先数值就好) 函数参数: netif:需要更新这些的网卡 ip:需要更新的ip mask:更新的掩码 gw:更新的网关 返回值:无 注释:本人亲测可以使用,代码成功*/void AddrUpdate(struct netif *netif,u8_t *ip,u8_t *mask,u8_t *gw){ ip_addr_t ip_u.原创 2021-08-07 16:58:06 · 1967 阅读 · 3 评论 -
STM32 CAN初始化详解
近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。回环静默模式是以上两种模式的结合,自己的输出端的所有内容都直接传输到自己的输入端,并且不会向总线发送显性位影响总线,输入端只接收自己发送端的内容,不接收来自总线上的内容。这种模式一般用于监测,它可以用于分析总线上的流量,但又不会因为发送显性位而影响总线。回环模式下,它自己的输出端的所有内容都直接传输到自己的输入端,输出端的内容同时也会被传输到总线上,输入端可以从总线接收内容。.原创 2022-07-20 22:52:40 · 5360 阅读 · 0 评论 -
单片机修改网络硬件驱动(phy芯片更换)
1.对比原理图,查看官网demo板连接引脚和当前phy芯片区别之前遇到一个问题,原demo有RXNN引脚,好像是用于错误检测,但是适配的芯片没有该引脚,然后就在一直校验该引脚,做法就是将该引脚复用为普通io2.遵循协议,一般协议都是通用的3.复位引脚,一般复位引脚需要拉高,但是注意一点最好是先拉低然后延时一会再拉高,有基本的点平变化4.PHY地址,一般是5位,很多PHY地址是由原理图中led灯几个引脚的高低电平决定的,其中大部分0是广播地址也就是可以适配任何phy5.MAC第一位不能是00,其实全ff是广播原创 2022-06-25 17:43:50 · 631 阅读 · 0 评论 -
单片机IO详解(上拉 下拉 准双向 输入 输出 推挽 开漏)
一般单片机都会提供上拉和下拉功能:上拉:将不确定的信号,固定在高电平,电源到器件引脚上的电阻叫上拉电阻,作用是平时使用该引脚为高电平,上拉是对器件注入电流,即灌电流下拉:将不确定的信号,固定到地点平,地到器件引脚的电阻叫下拉电阻,作用是平时使该引脚为低电平,下拉是从器件输出电流,即拉电流输入:上拉输入 :将不确定的信号通过一个电阻嵌位在高电平下拉输入 :把电压拉低,拉到GND,将不确定的信号拉到低电平输入浮空:容易受到干扰,检测电平是不定的模拟:传统方式的输入,数字模拟转换施密特输入:防止电路干扰基本电路的原创 2022-06-22 22:32:15 · 8440 阅读 · 1 评论 -
ymodem 串口升级卡死可能原因
基本的ymodem卡死可能的情况1.例如你调试的串口就是ymodem升级的串口,如果在发完c起始信号以后再次printf类似使用调试串口打印调试信息,就会导致传输卡死失败现象,而且不会有任何提示信息证明是你传输过程中打印导致失败,只能借助一定的经验2.如果你写入flash错误,校验错误也会导致卡死......原创 2022-05-28 13:51:31 · 969 阅读 · 0 评论 -
RTC基本函数1(stm初学,浅显易懂,基本知识)
// 将RTC恢复默认ErrorStatus RTC_DeInit(void);// 初始化RTCErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)// 填充每个RTC结构体成员默认数值void RTC_StructInit(RTC_InitTypeDef* RTC_InitStruct)// 使能或者失能RTC写保护寄存器void RTC_WriteProtectionCmd(FunctionalState NewStat原创 2022-05-01 22:10:13 · 1154 阅读 · 0 评论 -
STM32 RTC 初始化 [浅显易懂,基本知识]
首先学习一个标准的rtc,首先应该看其用户手册:stm用户手册描述rtc的主要特性:两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星 期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值 ( rtc时间格式)系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时 补偿。(不需要我们进行额外的处理)使用数字校准功能对晶振精度的偏差进行补偿 (调高rtc的精度)上电复位后,所有 RTC 寄...原创 2022-05-01 21:49:48 · 2374 阅读 · 0 评论 -
TIM定时器初始化详解一(超详细教程,简单好学,看了秒懂)
关于基本定时器的注释,各个详细的点都说明了,很适合初学者void TIM3_Init(void){ /* 初始化定时器时钟 apb1最大频率是42MHZ */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //开定时器3时钟 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; /* TIM_CounterMode_Up 边沿对.........原创 2022-03-16 22:19:26 · 6671 阅读 · 0 评论 -
单片机iap跳转(超详细教程,简单好学,看了秒懂)
iap跳转的作用:使用boot作为app升级,通常使用串口ymodem协议进行更新app,boot一般是占用很小的flash大约可以设置16kb,然后设置app的地址,设置相对的偏移地址后跳转到appymodem协议:https://mp.csdn.net/mp_blog/creation/editor/122768524几个注意的点:1.关闭中断之后,进入app要开启中断2.看门狗被开启之后,将永远不会被关闭,所以要做好喂狗的处理3.一般存在设置向量表的函数,跳转之后要设置相关的向原创 2022-03-13 23:21:12 · 4343 阅读 · 0 评论 -
【单片机】嵌入式硬核必备知识:合并bin文件,bin转换hex文件
首先为什莫要合成bin:很多时候单片机要求要boot和app两个程序9两种windows下合成bin的工具方法使用工具:SRecord 1.64转载两个教程:功能强大的 HEX 开源转换工具,你值得拥有-面包板社区映像文件工具srec - zongzi10010 - 博客园...原创 2022-02-20 16:22:25 · 4918 阅读 · 0 评论 -
单片机 彩色终端日志打印显示
自己整理的一个颜色打印,按需所取包括基本的日期 函数文件 文件名字 行数的打印原创 2022-02-16 20:18:21 · 526 阅读 · 0 评论 -
bootloader使用完善ymodem协议(优化完善stm的ymodem协议),以及xshell终端结束(超详细教程,简单好学,看了秒懂)
通过研究stm的ymodem协议,发现EOT之后直接就进行ACK回复确认了,没有进行NAK反复确认所以具体需要修改:主要是修改Ymodem_Receive函数首先EOT 之后 直接默认结束传输,所以将ACK修改为NAK最后在该函数的最后,模拟再次ACK C确认然后接收一包结束帧,再回复ACK确认注意:如果是xshell等终端需要再发送一个结束,提示ymodem协议结束添加基础的注释,便于理解,目前代码还没整理完成,先暂时不上传了 /** * @br原创 2022-02-02 11:54:49 · 5930 阅读 · 2 评论 -
串口485和串口232接线
因为只有串口和网口的线,因为需要两头都是串口接口,曾经接过RS232的线,RS232注意点:1.tx应该接rx,rx应该接tx,就是假如是红绿线,就应该是红接绿,绿接红2.如何知道那个是RX口哪个是TX口,只能确定2,3是rx和tx口,具体是哪个就看你的线是怎么接的3.如何知道那个是RX线,那个是TX线,通过万用表量一下和哪个口导通RS485注意点:RS485原理图分A B线,今天出了一个问题,就是A接B , B接A线后出现错误因为RS485需要A接A原创 2022-01-19 22:09:59 · 8976 阅读 · 0 评论 -
【单片机】gd32F4XX擦除整片flash导致无法开启中断
出现问题:当调用fmc_state_enum fmc_mass_erase(void)函数成功以后,突然下次启动所有的中断函数都不能正常开启所以怀疑中断向量表找不到了暂时解决 方法刚开始的时候出现这个问题,每次启动中断都会无法开启,暂时使用下边函数设置程序运行的起始地址,但是终究不是最正确的解决方法,不过建议以后的程序最好加上这一句比较保险void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset);nvic原创 2021-11-14 00:27:25 · 2418 阅读 · 0 评论 -
【单片机】串口重定向printf(串口回车错行问题解决方法)
关于串口打印在终端产生错行的行为不同的系统对于回车字符:Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“ \r\n” 或者 “ \n\r”;Mac系统里,每行结尾是“<回车>”。关于错误方法:一开始策略是每次输出的时候不管有没有\n都在最后边输出\r,导致后果如果不加\n输出的时候就会产生错误实现方法:int fputc(int ch,FILE *p) .原创 2021-11-12 23:56:49 · 1823 阅读 · 0 评论 -
【单片机】I2C读写EEPROM 2K和64K的区别
工作小白:之前没有写过eeprom的经验,然后项目更换芯片,demo中有一个I2C读写EEPROM的实验发现读写地址只有8位,读写的是2k的EEPROM因为用的是M4系列,32位,8位最多寻址256,根本不够64KB原创 2021-10-23 15:32:55 · 1378 阅读 · 0 评论 -
【单片机】单片机时钟
时钟是什么:就是机器的心脏,在心脏的规范跳动下有序的完成各项工作了解时钟第一步是先清楚时钟是由什么发出的:主要是时钟源晶振和振荡器例举一下stm32的时钟1.HSI 振荡器时钟2.HSE 振荡器时钟3.32 kHz 低速内部 RC (LSI RC):该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用 于停机/待机模式下的自动唤醒。4.32.768 kHz 低速外部晶振(LSE 晶振):用于驱动 RTC 时钟 (RTCCLK)5.主 PLL (PLL) 时钟:一般是HSR或者原创 2021-10-18 23:31:25 · 3281 阅读 · 0 评论 -
【单片机】I2C通信详解介绍(初学,浅显易懂,基本知识)
介绍:I2C通讯协议(Inter-Integrated Circuit)引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。特点:1.只需要一根数据线SDA和一根时钟线SCL,SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线SCL(Serial Clock):串行时钟线,传输CLK信号,一般是主设备向从设备提供SDA(Serial Data) :串行数据线,传输通信数据2.实现真正的多主机原创 2021-10-07 14:04:49 · 28637 阅读 · 0 评论 -
【单片机】串口UART通信详解介绍(超详细教程,简单好学,看了秒懂)
标准串口样子:特点:只需要一对数据线,大大降低成本,适用于远距离通信,传输速度慢传输方式:单工:使用一根传输线,发送和接受方已经规定好半双工:使用一根传输线,发送和接收方身份可以互换,但是一端不能同时是接受和发送方全双工:两根传输线,一根用来接受,一根用来发送传输通信方式:异步通信:(一般都是这个)数据一位一位地顺序传送,起始位开始,停止位结束,字符之间没有固定的时间间隔要求位:停止位,数据位,校验位(奇校验 偶校验)1.停止位和空闲位都规定位高电平2原创 2021-09-17 23:43:52 · 9875 阅读 · 1 评论 -
【单片机】小白初学者理解(施密特 开漏 推挽输出)
施密特:(Schmitt trigger)作用:主要是防止在滞后范围内之噪声干扰电路的正常工作,就是排除外部的干扰,保持电路的正常。施密特触发器有记忆性,具有滞回特性的双阈值动作,可以用来抗干扰。施密特触发器有两个稳定状态,但与一般触发器不同的是,施密特触发器采用电位触发方式,其状态由输入信号电位维持;对于负向递减和正向递增两种不同变化方向的输入信号,施密特触发器有不同的阈值电压。开漏:(Open drain output)所谓开漏电路概念中提到的“漏”就是指MOSFET的漏极。原创 2021-09-15 22:00:29 · 3298 阅读 · 0 评论 -
【单片机】位带操作(stm32)宏定义寄存器的作用
1.在stm32内核两处使用了位带操作:其中一处是SRAM区的最低1M范围,第二个则就是片内外设区当然它们还有自己的“位带别名区”,位带别名区将每个比特膨胀成一个32位的字,当访问位带别名区的这些字时,就可以达到访问位带区某个比特位的目的。其中位带操作从30年前51单片机开始就出现了2.比较位带操作和普通操作举例子:如果想要设置地址0x2000 0000 中的比特2a.不使用位带写操作:b.使用位带写操作:总结:从执行步数来看不使用位带明显多一步,位带操作稍微简.原创 2021-09-05 21:07:21 · 1215 阅读 · 2 评论 -
【FreeRTOS】初学者从零开始创建stm32工程(包括带着的FreeRTOS实时操作系统快速入门)
这里的芯片我们以stm32f407举例下载地址:https://www.stmicroelectronics.com.cn/content/st_com/zh/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32065.html#get-software固件库网址:https://www.stmi原创 2021-08-28 23:13:31 · 1358 阅读 · 0 评论