
PIC
努力-养家
超越一切,限界突破
展开
-
PIC单片机学习——MCU复位原因分析
一、简介 在项目中有遇到过设备在常上电情况下,出现重启问题。为了区分是软件造成的还是硬件造成的,在每次开机都去读取MCU复位控制寄存器的值来判断。二、RCON复位控制寄存器 寄存器的各个位的值定义如下: 当是软件复位时,主要观察IOPUWR位或WDTO位是否被置1,当是硬件复位时,主要观察BOR和POR是否被置1。...原创 2021-06-04 17:12:58 · 1591 阅读 · 2 评论 -
PIC单片机学习——中断向量之陷阱中断(PIC24EP64GP204)
一、简介 PIC24EP64GP204的中断向量表包含7个不可屏蔽陷阱向量和多达246个中断源,每个中断源都有自己的中断向量,每个中断向量都包含一个24位宽的地址。每个中断向量单元中编程的值是相关的中断服务程序的起始地址。如下表所示为中断向量在程序存储器中的分布。二、陷阱中断向量 陷阱中断向量包括振荡器故障陷阱向量、地址错误陷阱向量、通用硬陷阱向量、堆栈错误陷阱向量、数学错误陷阱向量、DMAC错误陷阱向量、通用软陷阱向量,当出现数组越界,程序跑飞,DMA操作无...原创 2021-06-04 15:54:21 · 1344 阅读 · 0 评论 -
使用联合体解决移位问题
一、介绍 当需要将数组转换成32位数据运算时,往往通过移位操作来实现。但是在位数较少的单片机中(8位/16位 MCU),其移位操作是有限的。利用联合体共用内存空间的原理可以有效解决移位问题,将数组的值直接转为32位数据。二、开发环境 MCU:PIC24FJ32GA002 16位 IDE:MAPLAB X 编译器:XC16 v1.20 存储模式:小端模式三、代码实现typedef union{ uint...原创 2021-05-12 18:10:28 · 459 阅读 · 0 评论 -
PIC学习——时钟配置方式(寄存器或编译器位配置)
一、开发环境IDE:MAPLAB XMCU型号:PIC24FJ二、时钟模式总共有六种时钟配置模式,通过OSCCON寄存器的NOSC2:NOSC0去配置模式。然后根据对应的支路去配置时钟的倍频和分频。原创 2020-06-03 09:52:05 · 1902 阅读 · 0 评论 -
PIC学习——DMA发送
一、介绍 DMA传输是一种不需要占用CPU的传输方式,当把数据装进去并启动DMA发送后,CPU可以去执行其它主线程任务,而不用等待。使用DMA传输可以给CPU减负,提高程序的执行效率。二、使用发送函数如下:void uart1_dma_tx(uint8_t *buf, uint8_t len){ if (len == 0) { return; } while (!U1STAbits.TRMT); ...原创 2020-05-29 15:03:06 · 1260 阅读 · 2 评论 -
SPI出错的问题——中断嵌套引起的
一、问题 一般SPI底层写完,如果能运行起来代码是不会出错的。但当出现多中断嵌套时,就有可能会出现SPI操作错误的地址造成出错。 二、现象 博主在用PIC开发时遇到这样的情况: 在低优先级中断里运行SPI读函数去读与单片机通信芯片的寄存器的值,恰巧地址是16位的,在SPI访问地址时得先写进高地址,然后再写进低地址访问。如果在写入高地...原创 2020-04-28 10:26:33 · 2207 阅读 · 2 评论 -
PIC单片机的学习——时钟的配置与相关外设的一些计算
一、概念 Fcy是CPU时钟,Fosc晶振频率。Fcy = Fosc/2,也就是CPU时钟是晶振频率的1/2。二、寄存器的配置 例子如下: //系统时钟初始化 产生55.296M //11.0592M晶振 // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 // Fosc= 11.0592M*60...原创 2020-03-18 16:06:51 · 4507 阅读 · 0 评论 -
PIC单片机学习遇到的一些问题
1、中断优先级 中断优先级的设置虽然能够比较合理的管理资源,但是如果在中断里写太多内容会导致另一个中断可能永远进不去的现象。比如在定时器中断里定20ms,但是中断里面处理的代码量太多超过20ms,则会出现另一个中断优先级低的刚等待定时器执行完要开始执行时,定时时间到了又进定时中断。如此循环低优先级的中断永远也进不去。(给低优先级中断IE位重新复位可以在短时间无视优先级执行,不过过一...原创 2019-08-08 17:06:23 · 629 阅读 · 0 评论 -
【PIC单片机的学习】在MAPLAB X IDE中加入printf函数
当调试单片机时,通过串口打印变量的值来调试代码是一种很好的调试方式,本文将讲述如何在PIC单片机使用printf函数。使用的开发环境是MAPLAB X IDE V5.20,单片机的型号为PIC24F32JGA002。 首先要调用stdio.h头文件,然后写入以下两个函数 void putch(unsigned char byte) { ...原创 2019-07-12 20:10:59 · 2228 阅读 · 2 评论