本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:53 编辑
HC89F003是一款兼容型的MCU。今天小编为大家介绍一下这款MCU的一个亮点 - 内部资源的管脚全映射。下面上MCU管脚图,由于管脚全映射的原因,在管脚图上面是看不到UART和SPI等功能的管脚的。
首先把HC89F003的管脚映射的寄存器贴出来并向大家一一解释。(见HC89F003数据手册的Io章节)
T0_MAP 定时器0
T1_MAP 定时器1
T3_MAP 定时器3
T4_MAP 定时器4
T5_MAP 定时器5
CLKO_MAP 时钟输出
PWM0_MAP PWM0输出口
PWM01_MAP PWM01输出口
PWM1_MAP PWM1输出口
PWM11_MAP PWM11输出口
PWM2_MAP PWM2输出口
PWM21_MAP PWM21输出口
PWM3_MAP PWM3输出口
TXD_MAP 串口1的TXD口
RXD_MAP 串口1的RXD口
SS_MAP SPI的使能控制口
SCK_MAP SPI的时钟输出口
MOSI_MAP SPI的 主输出从输入 口
MISO_MAP SPI的 主输入从输出 口
TXD2_MAP 串口2的TXD口
RXD2_MAP 串口2的RXD口
HC89F003的管脚全映射,是指上图所说的资源可以映射到MCU中除了VDD和GND其他的全部管脚。
下面上程序,简单的演示下管教全映射的功能。
比如PWM0映射到P23。那么寄存器PWM0_MAP = 0x23;同时需要设置P23口为推挽输出,如果设置为输入模式是检测不到端口的PWM的。
以下是PWM的库函数版本的范例和寄存器范例。欢迎大家来询。
#include "hc89f_wdt.h"
#include "hc89f_clock.h"
#include "hc89f_gpio.h"
#include "hc89f_pwmgroup.h"
void main(void)
{
WDT_TurnOff(); //关闭看门狗
CLK_OscClockConfig(CLK_OSC_16MHZ); //设置OSC时钟为16M
CLK_CpuClockConfig(2); //设置CPU时钟为8M
/*以下是PWM管脚映射*/
GPIO_Init(GPIOT0,GPIO_PIN_0,GPIO_MODE_OUT_PP); //P00推挽输出
GPIO_Init(GPIOT0,GPIO_PIN_1,GPIO_MODE_OUT_PP); //P01推挽输出
PWM_PinRemapConfig(PWM_0_1,PWM_OUTPin_P00); //PWM01通道映射P00口
PWM_PinRemapConfig(PWM_0,PWM_OUTPin_P01); //PWM0通达映射P01口
/*以下是PWM模式设置*/
PWM_Init(PWM0_Group,PWMCK_8,PWMX_HIGH_PWX1_LOW_VALID,INDEPENDENT_MODE);
PWM_OutPutCmd(PWM_0_All,ENABLE); //PWM0全部通道输出使能
PWM_PeriodConfig(PWM0_Group,0x03FF); //PWM周期0x03FF
PWM_DutyCycleConfig(PWM0_Group,0x0155); //PWM0占空比33.4%
PWM_DeadZoneConfig(PWM0_Group,0x0155); //PWM01占空比33.4%
PWM_Cmd(PWM0_Group,ENABLE); //PWM0全部通道使能
while(1);
}
|