打印
[国产单片机]

【东软载波ES32F369x】ES-PDS评估板熟悉与开发环境搭建

[复制链接]
827|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 hbzjt2011 于 2021-1-5 22:36 编辑

#申请原创#              ES-PDS 系列原型开发系统是上海东软载波微电子公司基于不同 MCU 产品设计的学习板,主要用于指导工程师快速学习 MCU 的各种外设功能,ES-PDS 硬件由核心板包括,LED,按键,导航键,LCD,电源切换开关,USB,电位器, LCD,USB(OTG),电机驱动,CAN 总线等等常用外设,正面集成了 ES-PDS 标准接口,反面集成了 ARDUINO 接口。核心板及ES-LINK II下载调试工具如下图所示:


       板载的ES32F3696  MCU 最大支持 512KB FLASH 和 96KB SRAM, 且支持通过 EBI 接口扩展外部存储。支持 QSPI 接口,不仅可用于外部 FLASH 等存储扩展,也可支持高速数据传输。支持多达 84个 IO,支持 2 路 12 位 ADC,2 路 12 位 DAC,3 路模拟比较器,支持 RTC 日历、闹钟等功能。带丰富的定时器资源,支持 2 路高级定时器(AD16C4T),2 路通用定时器(GP16C4T),2 路基本定时器(BS16T),  2 路 32 位通用定时器。 支持丰富的通信资源, 包括 2 路 I2C, 3 路 SPI/I2S, 6 路 UART,另外支持全速/高速 USB 主机、设备和 OTG 接口,还支持 CAN 接口通信。
       东软载波公司提供了单片机的开发工具包ES32 SDK ,该开发工具包是东软载波微电子开发的、面向 ES32 系列微控制器内核以及外设的一套高集成、易使用、面向过程与对象相结合的驱动库,包括 MD、ALD、BSP、中间层驱动。SDK兼容 CMSIS 标准,可以高效地移植不同的操作系统、文件系统等第三方软件。
      三种驱动库的区别如下:

  • MD 驱动面向过程开发,接近微控制器底层操作,提供用户微控制器寄存器操作简单接口,操作方便;
  • ALD 驱动对微控制器外设做抽象化操作,是一套抽象化的面向对象的驱动,用户无需更多关注底层设备的原理, 只需要调用相关外设的接口函数即可对外设进行操作;
  • BSP 驱动提供了基于 ES32 微控制器开发板 ES-PDS 的驱动。
      由于ALD驱动库进行了单片机底层寄存器的封装,因此更加适合于用户快速开发使用该单片机,因此我选择了该驱动库进行开发。ES32 SDK提供了标准的例程,包括IAR开发工具、Keil开发工具以及东软载波公司自己研发的iDesigner开发工具的例程。由于 Keil4 不支持 PACK 机制,因此这里选择Keil5进行开发。
具体的模板工程建立步骤可参考我之前发布的贴子,这里只需要将最新版的ALD库文件和CMSIS文件替换,然后添加ES32F36xx的启动文件和包含目录即可:
【东软载波ESF0654 PDS开发板活动】模板工程建立及LED、UART测试
https://bbs.21ic.com/icview-2888774-1-1.html?fromuser=hbzjt2011
(出处: 中国电子网技术论坛)
这里同样使用板载的LED灯和UART进行测试,两个LED灯使用PF0和PF1控制,UART的发送和接收引脚分别为PB10和PB11,采用UART0,代码如下:led.c
#include "main.h"

void led_pin_init(void)
{
        //LED灯控制端口初始化
        gpio_init_t x;
        
        /* Initialize LED1 */
        x.mode = GPIO_MODE_OUTPUT;
        x.odos = GPIO_PUSH_PULL;
        x.pupd = GPIO_PUSH_UP;
        x.podrv = GPIO_OUT_DRIVE_6;
        x.nodrv = GPIO_OUT_DRIVE_6;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_CMOS;
        x.func = GPIO_FUNC_1;
        ald_gpio_init(LED1_PORT, LED1_PIN, &x);

        /* Initialize LED2 */
        x.mode = GPIO_MODE_OUTPUT;
        x.odos = GPIO_PUSH_PULL;
        x.pupd = GPIO_PUSH_UP;
        x.podrv = GPIO_OUT_DRIVE_6;
        x.nodrv = GPIO_OUT_DRIVE_6;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_CMOS;
        x.func = GPIO_FUNC_1;
        ald_gpio_init(LED2_PORT, LED2_PIN, &x);
}
uart_usb.c
#include "main.h"

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  Initializate pin of uart module.
  * @retval None
  */
void uart_pin_init(void)
{
        gpio_init_t x;

        /* Initialize tx pin */
        x.mode = GPIO_MODE_OUTPUT;
        x.odos = GPIO_PUSH_PULL;
        x.pupd = GPIO_PUSH_UP;
        x.podrv = GPIO_OUT_DRIVE_1;
        x.nodrv = GPIO_OUT_DRIVE_0_1;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_TTL;
        x.func = GPIO_FUNC_3;
        ald_gpio_init(UART0_TX_PORT, UART0_TX_PIN, &x);

        /* Initialize rx pin */
        x.mode = GPIO_MODE_INPUT;
        x.odos = GPIO_PUSH_PULL;
        x.pupd = GPIO_PUSH_UP;
        x.podrv = GPIO_OUT_DRIVE_1;
        x.nodrv = GPIO_OUT_DRIVE_0_1;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_TTL;
        x.func = GPIO_FUNC_3;
        ald_gpio_init(UART0_RX_PORT, UART0_RX_PIN, &x);

        return;
}

void uart_usb_init(void)
{
        /* clear uart_handle_t structure */
        memset(&h_uart, 0x0, sizeof(h_uart));
        /* Initialize pin */
        uart_pin_init();

        /* Initialize uart */
        h_uart.perh             = UART0;
        h_uart.init.baud        = 115200;
        h_uart.init.word_length = UART_WORD_LENGTH_8B;
        h_uart.init.stop_bits   = UART_STOP_BITS_1;
        h_uart.init.parity      = UART_PARITY_NONE;
        h_uart.init.mode        = UART_MODE_UART;
        h_uart.init.fctl        = UART_HW_FLOW_CTL_DISABLE;
        
        ald_uart_init(&h_uart);
}
main.c
#include "main.h"


/** @addtogroup Projects_Templates_ALD
  * @{
  */

/** @addtogroup Templates
  * @{
  */
uart_handle_t h_uart;
uint8_t tx_buf[32];


/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  This is main function.
  *         Detect running time.
  * @retval Status
  */
int main()
{
        /* Initialize ALD */
        ald_cmu_init();
        /* Configure system clock */
        ald_cmu_pll1_config(CMU_PLL1_INPUT_HOSC_3, CMU_PLL1_OUTPUT_72M);
        ald_cmu_clock_config(CMU_CLOCK_PLL1, 72000000);
        /* Enable peripheral */
        ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE);
        ald_cmu_perh_clock_config(CMU_PERH_UART0, ENABLE);
        
        /* Initialize tx_buf */
        memset(tx_buf, 0x55, sizeof(tx_buf));

        ///* Initialize uart_usb */
        uart_usb_init();
        
        /* Initialize led */
        led_pin_init();
        

        while (1) {
                /* Send a message */
                sprintf((char *)tx_buf, "es32 uart test!\n");
                ald_uart_send(&h_uart, tx_buf, sizeof("es32 uart test!\n"), 1000);
               
                ald_gpio_write_pin(LED1_PORT, LED1_PIN, 0);
                ald_gpio_write_pin(LED2_PORT, LED2_PIN, 0);
                ald_delay_ms(500);
                ald_gpio_write_pin(LED1_PORT, LED1_PIN, 1);
                ald_gpio_write_pin(LED2_PORT, LED2_PIN, 1);
                ald_delay_ms(500);
        }
}
编译完成后,使用ES-LINK下载程序,重新上电后可以看到程序运行效果如下:


  @21小跑堂

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎参与LabVIEW版块的讨论学习! 点我一键即达

157

主题

2338

帖子

41

粉丝