博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pic32mx是什么cpu_PIC32MX单片机外设库使用(Ⅰ)- 系统时钟及I/O口基本设置
阅读量:1540 次
发布时间:2019-04-21

本文共 3801 字,大约阅读时间需要 12 分钟。

步骤二:设置I/O口的值

/**************************************************************************

**功能:设置PORTG的第16根口线值为0。

**输入1:IOPORT_G -- 对应PORTG口

**输入2:BIT_15 -- 对应选定PORTG口的第16位

**说明:调用该函数会自动关闭掉带模拟功能I/O口的模拟功能。

***************************************************************************/

PORTClearBits(IOPORT_G, BIT_15);

同理,若是想设置PORTG口的第16位为输出"1",可以使用函数为:

PORTSetBits(IOPORT_G, BIT_15);

同理,若只是想翻转原来的I/O口值,也可以直接使用库函数

PORTToggleBits(IOPORT_G, BIT_15);

4.2 振荡器控制

PIX32X系列单片机有多个时钟源,基本可以分为内部时钟源及外部时钟源两大类,振荡器库函数提 供了单片机时钟源的各种配置功能。

/**************************************************************************

**函数原型void OSCConfig(unsigned long int config1,

unsigned long int config2,

unsigned long int config3,

unsigned long int config4);

**功能:该函数用于设置振荡源、PLL分频器、PLL倍频器、和FRC除数因子

**输入1:config1 -- 包含时钟源选择的位段(即选择一下宏定义就能选择对应的时钟源)

OSC_FRC_DIV

OSC_FRC_DIV16

OSC_LPRC

OSC_SOSC

OSC_POSC_PLL

OSC_POSC

OSC_FRC_PLL

OSC_FRC  —— 内部8M振荡器

**输入2:config2 -- PLL倍频器位段选择

OSC_PLL_MULT_15

OSC_PLL_MULT_16

OSC_PLL_MULT_17

OSC_PLL_MULT_18

OSC_PLL_MULT_19

OSC_PLL_MULT_20

OSC_PLL_MULT_21

OSC_PLL_MULT_24

**输入3:config3 -- PLL分频位段选择

OSC_PLL_POST_1

OSC_PLL_POST_2

OSC_PLL_POST_4

OSC_PLL_POST_8

OSC_PLL_POST_16

OSC_PLL_POST_32

OSC_PLL_POST_64

OSC_PLL_POST_256

**输入4:config4 -- FRC除法因子选择

OSC_FRC_DIV_1

OSC_FRC_DIV_2

OSC_FRC_DIV_4

OSC_FRC_DIV_8

OSC_FRC_DIV_16

OSC_FRC_DIV_32

OSC_FRC_DIV_64

OSC_FRC_DIV_256

**说明:调用该函数会自动关闭掉带模拟功能I/O口的模拟功能。

***************************************************************************/

实际代码分析

main() {

// this example sets the cpu clock to FRC and then to POSC PLL

OSCConfig(OSC_FRC, 0, 0, 0); //选择内部FRC 8M 晶振 mOSCSetPBDIV(OSC_PB_DIV_8); //外设时钟分频器选择

}

说明:关于输入参数的具体含义需要找到相关的宏定义及对芯片的时钟源架构有很好的了解,此处笔者选用内部FRC 8M晶振。

4.3定时器控制

目标:制作500ms定时器,用于LED的闪烁控制

/**************************************************************************

**函数原型void OpenTimer1(unsigned int config, unsigned int period),

**功能:定时器1配置

**输入1:config1 -- 定时器1配置位段

Timer Module On/Off(定时器1模块开启 或 关闭)

Tx_ON

Tx_OFF

Asynchronous Timer Write Disable (同步定时器写使能)

T1_TMWDIS_ON

T1_TMWDIS_OFF

Timer Module Idle mode On/Off (定时器空闲模式开启 或 关闭)

Tx_IDLE_CON

Tx_IDLE_STOP

Timer Gate time accumulation enable

Tx_GATE_ON

Tx_GATE_OFF

Timer Prescaler (1)  -- --Timer Input Clock Prescale Select bits,timer1只有这个选项

T1_PS_1_1

T1_PS_1_8

T1_PS_1_64

T1_PS_1_256

Timer Prescaler

Tx_PS_1_1

Tx_PS_1_2

Tx_PS_1_4

Tx_PS_1_8

Tx_PS_1_16

Tx_PS_1_32

Tx_PS_1_64

Tx_PS_1_256

Timer Synchronous clock enable (1)

Tx_SYNC_EXT_ON

Timer Clock source

Tx_SOURCE_EXT  -- External clock from TxCKI pin

T1_SOURCE_INT   -- Internal peripheral clock

输入2:period -- This argument contains the 16-bit period value for the Timer.

**说明:This macro clears the TMRx register, writes periodto the PRx register

and writes configto the TxCON register

***************************************************************************/

实际代码分析:

void TIMER_Config()

{

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// STEP 1. configure the Timer1

OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, 0x7A1); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// STEP 2. set the timer interrupt to prioirty level 2

ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// STEP 3. enable multi-vector interrupts

INTEnableSystemMultiVectoredInt();

}

Timer 定时器工作原理浅析:

经过上面设置,定时器从0开始计数,当计数值与period(此代码为0x100) 时产生中断,中断后会清标志,并清period值,重新从0开始计数(period对应寄存器PR1)

void __ISR(4, ipl2) _Timer1Handler(void)

{

// clear the interrupt flag

mT1ClearIntFlag();

// .. things to do ..

OPEN_LED_D4();

}

下面我们可以一起验证下时钟配置是否正确:

目标:产生500ms的定时器。

1.系统时钟选择为FRC = 8M

2.系统外设时钟为系统时钟的8分频 = 8M/8 = 1M

3.定时器时钟源选择为内部系统外设时钟,且做了256次分频 1M/256 = 3906

4.500ms转换成频率就是2(HZ)

那么PR1的值应该是多少呢? 3906/2 = 1953 转换成16进制就是7A1,这样一来就得出了配置时钟1时period应该写入的值了。

用示波器观察LED_D4指示灯的高低电平时间为504ms,考虑到一定的误差,总体设计应该是对的。

转载地址:http://yaldy.baihongyu.com/

你可能感兴趣的文章
mac连续互通相机功能小技巧分享~
查看>>
你的iPhone能更新iOS 14吗?
查看>>
想要列出Mac上所有应用程序?这几个小技巧推荐给你!
查看>>
个人理财习惯养成~
查看>>
12款音乐发烧友必备Mac App,轻松创作动听音乐!
查看>>
Mac新手必备小技巧:了解这些功能,快速熟悉苹果电脑
查看>>
mac终端在哪里打开
查看>>
Mac出现启动问题怎么办
查看>>
mac技巧|如何设定Mac 的睡眠和唤醒时间教程?
查看>>
运用到工作中的Mac OS 技巧分享~
查看>>
Mac新手必备小技巧:让你的MAC操作更顺手
查看>>
教你快速将系统偏好设置窗口添加到Mac Dock,快来学准没错!
查看>>
Ps Elements 2021使用教程:修复和增强照片
查看>>
mac电脑变成访客模式,快速恢复管理员方法分享~
查看>>
mac电脑运行速度变慢的十种解决方法
查看>>
苹果电脑新手必备:MacOS访达的隐藏小技巧
查看>>
解决Mac苹果电脑使用Safari浏览器时无法在地址栏搜索的方法
查看>>
Mac上设置共享的视频音乐或照片的教程
查看>>
为Mac任意命令设置快捷键,你可以这样做~
查看>>
幻灯片制作,你选好工具了吗?
查看>>