EasyARM_RT1052外设初始化

GPIO初始化

复用初始化

IOMUXC_SetPinMux(
        IOMUXC_GPIO_AD_B1_03_GPIO1_IO19,        /* GPIO_AD_B0_09 is configured as GPIO1_IO09 */
        0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    IOMUXC_SetPinMux(
        IOMUXC_GPIO_AD_B0_12_LPUART1_TX,        /* GPIO_AD_B0_12 is configured as LPUART1_TX */
        0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    IOMUXC_SetPinMux(
        IOMUXC_GPIO_AD_B0_13_LPUART1_RX,        /* GPIO_AD_B0_13 is configured as LPUART1_RX */
        0U);                                    /* Software Input On Field: Input Path is determined by functionality */
    

属性PAD初始化

IOMUXC_SetPinConfig(
        IOMUXC_GPIO_AD_B1_03_GPIO1_IO19,        /* GPIO_AD_B0_09 PAD functional properties : */
        0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: R0/6
                                                 Speed Field: medium(100MHz)
                                                 Open Drain Enable Field: Open Drain Disabled
                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
                                                 Pull / Keep Select Field: Keeper
                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
                                                 Hyst. Enable Field: Hysteresis Disabled */
    IOMUXC_SetPinConfig(
        IOMUXC_GPIO_AD_B0_12_LPUART1_TX,        /* GPIO_AD_B0_12 PAD functional properties : */
        0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: R0/6
                                                 Speed Field: medium(100MHz)
                                                 Open Drain Enable Field: Open Drain Disabled
                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
                                                 Pull / Keep Select Field: Keeper
                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
                                                 Hyst. Enable Field: Hysteresis Disabled */
    IOMUXC_SetPinConfig(
        IOMUXC_GPIO_AD_B0_13_LPUART1_RX,        /* GPIO_AD_B0_13 PAD functional properties : */
        0x10B0u);                               /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: R0/6
                                                 Speed Field: medium(100MHz)
                                                 Open Drain Enable Field: Open Drain Disabled
                                                 Pull / Keep Enable Field: Pull/Keeper Enabled
                                                 Pull / Keep Select Field: Keeper
                                                 Pull Up / Down Config. Field: 100K Ohm Pull Down
                                                 Hyst. Enable Field: Hysteresis Disabled */

模式初始化

/* Init output LED GPIO. */
    GPIO_PinInit(EXAMPLE_LED_GPIO, EXAMPLE_LED_GPIO_PIN, &led_config);

SYSTICK函数

配置1ms定时周期

	SysTick_Config(SystemCoreClock / 1000))

延时函数的实现

全局变量方式

/**
 * @brief SysTick 中断服务函数
 * @param 无 4 * @retval 无 5 * @attention
 */
void SysTick_Handler(void) 8 { 9 if (TimingDelay != 0x00) 
{
    TimingDelay--;
}

查询CTRL寄存器的方式

void SysTick_Delay_Us( __IO uint32_t us)
{  
	uint32_t i;
	SysTick_Config(SystemCoreClock/1000000);//1us定时
	for (i=0; i<us; i++) 
	{
		/* 当计数器的值减小到 0 的时候,CRTL 寄存器的位 16 会置 1 */
		while ( !((SysTick->CTRL)&(1<<16)) );
	}
	/* 关闭 SysTick 定时器 */
	SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}

PIT定时器组

  PIT定时器组有4个通道,或者说PIT拥有4个子定时器,这些子定时器共用一个时钟源,共用一个中断号。
  通道的结构体定义如下:

	typedef enum _pit_chnl
	{
	    kPIT_Chnl_0 = 0U, /*!< PIT channel number 0*/
	    kPIT_Chnl_1,      /*!< PIT channel number 1 */
	    kPIT_Chnl_2,      /*!< PIT channel number 2 */
	    kPIT_Chnl_3,      /*!< PIT channel number 3 */
	} pit_chnl_t;

设置PIT时钟及分频

	/*************************** 第一部分 ****************************/
	/* 设置 PIT 定时器时钟 OSC_CLK*/
	CLOCK_SetMux(kCLOCK_PerclkMux, 1U);
	/* 设置 PERCLK_CLK 时钟分频为 1 */
	CLOCK_SetDiv(kCLOCK_PerclkDiv, 0U);

修改PIT参数并初始化

/************************** 第二部分 ****************************/
	/* 获得 PIT 定时器默认配置参数 */
	PIT_GetDefaultConfig(&pitConfig);
	/* 修改默认配置参数 */
	pitConfig.enableRunInDebug = true;
	/* 初始化 PIT */
	PIT_Init(PIT, &pitConfig);

设置通道及重装值

	/************************** 第三部分 ************************/
	/* 设置 PIT 定时器通道 0 自动重装载值 */
	PIT_SetTimerPeriod(PIT, PIT_CHANNEL_X, \
	USEC_TO_COUNT(TIME_0, PIT_SOURCE_CLOCK));

配置中断并使能

	/************************* 第四部分 **************************/
	/* 清除通道 0 的中断标志位 */
	PIT_ClearStatusFlags(PIT, PIT_CHANNEL_X, kPIT_TimerFlag);
	/* 使能通道 0 的计时完成中断 */
	PIT_EnableInterrupts(PIT, PIT_CHANNEL_X, kPIT_TimerInterruptEnable);
	/* 设置中断优先级,*/
	set_IRQn_Priority(PIT_IRQ_ID,Group4_PreemptPriority_6,Group4_SubPriority_0);
	/* 使能 PIT 定时器中断 */
	EnableIRQ(PIT_IRQ_ID);

SRAM初始化

FMC配置

上电序列初始化

  标准库会直接将此部分写到配置函数里面,HAL库会增加一个函数SDRAM_Initialization_Sequence

外部RAM的使用

直接使用指针

  适用于外扩RAM比较小的情况,需要配合宏定义使用,应用较为麻烦。

绝对定位方式

  引入内存管理的概念,定义一个大数组当做内存池,再定义一个大数组当内存表,定义完这些变量后,再去写内存管理的应用程序。
  应用时如下:

    p = mymalloc ( sramx, 1024 * 2 ); //申请内存空间(实际获得一个指向内存池区域的指针)
    sprintf((char*)p, "Memory Malloc"); //对申请的空间写值

自动分配

  通过_MAIN函数前添加FMC初始化,并修改scatterr文件实现。
  具体实现参照《零死角玩转 STM32—基于野火 F103(霸道_V2)开发板》

F427机架板的应用方式

  应用中启动FMC,调用_init_alloc()分配堆空间,函数引用步骤如下:

  1. 包含头文件
#include <stdlib.h>
#include <rt_heap.h>
  1. 取消微库选项

在这里插入图片描述

总结

  的意义在于后续使用malloc函数申请空间。
  的意义在于局部变量的使用。

外部SRAM初始化

RT1052使用的外设为SEMC
STM32F4使用的是FMC,此外设从FSMC升级而来,增加了更多的功能支持。

安全外设

总线加密引擎(BEE)

  支持QSPI的运行时解密,适用于固件加密与解密的应用。

数据协处理器(DCP)

  支持AES-128、SHA-1、SHA256、CRC32计算。

安全非易失存储(SNVS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡姆图拉夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值