随想录(高性能微控制器-rt系列soc)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

    在国内市场上,stm32是谜一样的存在。工控领域,除了51单片机,大概就是stm32的应用最广。其实不管是在消费类玩具电子,还是工业生产、物联网,stm32都有它的一席之地。近年来,随着m7的发布,现在stm32的最高频率甚至可以达到600M,这个频率基本上可以运行uclinux了,不再是传统意义上的单片机了。最近花了一些时间学习m7,由于意法半导体出的m7芯片比较晚,之前大家学的比较多的还是nxp公司的rt1052系列,所以我也不例外。但是stm32f系列和rt系列差不多,掌握一个,另外一个学习也不难。

 

1、开发板

    关于m7的开发板,可以选用野火或者是正点原子。

 

2、软件开发环境

    一般都选用MDK开发。

 

3、连接方法

    电源线连接开发板电源,usb线作为串口打印,还有就是jtag、作为版本烧录或者调试使用,

 

4、地址分布

    地址分布是学习soc很重要的一个方面,但是好像很多朋友都不是太注意

    0x0~0x20000, 0x20000000~0x20060000,内部ram空间

    0x80000000~ sdram空间

    0x60000000~ spiflash 映射的空间,即能被cpu直接访问的空间

    其他外设空间,比如GPIO1是0x401B8000

 

5、关键的几个配置文件

    FLM文件,只有选择合适的FLM文件,jtag才能将代码下载到norflash当中

    ini文件,jtag加载程序的时候需要执行的文件,比如文件中的_loadDcdcTrim就是用来进行dcdc电压设置的

    scf文件,keil使用的链接脚本,类似于gcc下面的ld文件

 

6、KEIL工程中重要的代码文件

    fire_imxrt1052_sdram_ini_dcd.c,sdram初始化文件

    fire_imxrt1052_spiflash_config.c,spi flash初始化文件,告诉soc如何用线性方式读取指令

    fire_flexspi_nor_boot.c,配置文件,包含了上述两个文件的一些地址信息

    当然startup_MIMXRT1052.s和main.c也比较重要,但是它们的逻辑简单,应该一下子就学会了。

 

7、KEIL常用的一些选项

    DOWNLOAD(F8),烧录按钮

    START/STOP DEBUG(ctrl + F5),调试按钮

    Options for taget,工程属性设置按钮

 

8、CMSIS包

    现在MCU的开发方式最好依赖于API进行开发,CMSIS就是其中一种。这样在换不同厂家的mcu时,代价也小一点。当然,如果大家还是对硬件很感兴趣,可以调试的时候单步执行下去,效果是一样的,问题不是很大。

    比如说,如果有一个最简单的gpio操作,一般是这么安排的,首先选择pin、设定pin属性,最后设置gpio属性,这样就可以完成一个基本的gpio操作。我们可以引用一下野火的代码来说明这个问题,

 

/**
* @brief  初始化LED相关IOMUXC的MUX复用配置
* @param  无
* @retval 无
*/
static void LED_IOMUXC_MUX_Config(void)
{
  /* 核心板的LED灯 */    
  /* 设置引脚的复用模式为GPIO,不使用SION功能 */
  IOMUXC_SetPinMux(CORE_BOARD_LED_IOMUXC, 0U);

  /* RGB LED灯,使用同样的IOMUXC MUX配置 */  
  IOMUXC_SetPinMux(RGB_RED_LED_IOMUXC, 0U); 
  IOMUXC_SetPinMux(RGB_BLUE_LED_IOMUXC, 0U);  
  IOMUXC_SetPinMux(RGB_GREEN_LED_IOMUXC, 0U);
}

/**
* @brief  初始化LED相关IOMUXC的MUX复用配置
* @param  无
* @retval 无
*/
static void LED_IOMUXC_PAD_Config(void)
{
  /* 核心板的LED灯 */    
  IOMUXC_SetPinConfig(CORE_BOARD_LED_IOMUXC, LED_PAD_CONFIG_DATA);  
 
  /* RGB LED灯,使用同样的IOMUXC PAD配置 */ 
  IOMUXC_SetPinConfig(RGB_RED_LED_IOMUXC, LED_PAD_CONFIG_DATA); 
  IOMUXC_SetPinConfig(RGB_GREEN_LED_IOMUXC, LED_PAD_CONFIG_DATA); 
  IOMUXC_SetPinConfig(RGB_BLUE_LED_IOMUXC, LED_PAD_CONFIG_DATA);  
}


 /**
  * @brief  初始化LED相关的GPIO模式
  * @param  无
  * @retval 无
  */
static void LED_GPIO_Mode_Config(void)
{     
  /* 定义gpio初始化配置结构体 */
  gpio_pin_config_t led_config;      
    
   /** 核心板的LED灯,GPIO配置 **/       
  led_config.direction = kGPIO_DigitalOutput; //输出模式
  led_config.outputLogic =  1;                //默认高电平
  led_config.interruptMode = kGPIO_NoIntmode; //不使用中断
  
  /* 初始化 LED GPIO. */
  GPIO_PinInit(CORE_BOARD_LED_GPIO, CORE_BOARD_LED_GPIO_PIN, &led_config);
  
  /* 使用同样的LED config配置RGB LED灯 */
  GPIO_PinInit(RGB_RED_LED_GPIO, RGB_RED_LED_GPIO_PIN, &led_config);
  GPIO_PinInit(RGB_GREEN_LED_GPIO, RGB_GREEN_LED_GPIO_PIN, &led_config);
  GPIO_PinInit(RGB_BLUE_LED_GPIO, RGB_BLUE_LED_GPIO_PIN, &led_config);
}

/**
  * @brief  初始化控制LED的IO
  * @param  无
  * @retval 无
  */
void LED_GPIO_Config(void)
{
  /* 初始化GPIO复用、属性、模式 */
  LED_IOMUXC_MUX_Config();
  LED_IOMUXC_PAD_Config();
  LED_GPIO_Mode_Config();
}

 

9、MCU支持的外设

    目前rt soc支持GPIO、UART、IIC、CAN、Norflash、NAND flash、SD、Ethernet、Camera等很多设备,基本上除了视频、音频、3d、编解码之外,MCU可以完成你需要的任何功能。

 

10、更多的第三方包

    除了CMSIS,我们还可以在野火的开发包里面看到很多的中间件,比如rtos、fatfs、usb、sd、lwip、emwin等等,大家可以根据自己的需要灵活使用。当然这么高的cpu频率,使用时多做一些复杂的算法计算,效果应该还是不错的。

 

你可能感兴趣的:(随想录)