打印
[国产单片机]

【东软载波ESF0654 PDS开发板活动】模板工程建立及LED、UART...

[复制链接]
1124|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hbzjt2011|  楼主 | 2019-12-14 22:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hbzjt2011 于 2019-12-15 18:40 编辑

【东软载波ESF0654 PDS开发板活动】模板工程建立及LED、UART测试     

      ES-PDS 系列原型开发系统是上海东软载波微电子公司基于不同 MCU 产品设计的学习板,板载基于 ARM Crotex-M0 架构推出了全新的 32 位单片机芯片——ES32F0654LT,该系列单片机拥有丰富的外设、多样的通讯接口、极低的功耗特性,适用于智能电表、高端家电、仪器仪表、工业控制等领域,能够与 ST 的 F0 系列完美兼容。      ES-PDS 核心板正面集成了 ES-PDS 标准接口,反面集成了 ARDUINO 接口,可供安装相应功能的子板,并且两种接口所有脚都标注了芯片对应管脚的丝印。 下图为板子的靓照以及ES32单片机的仿真调试工具ES-LINK II。



      公司提供了单片机的开发工具包ES32 SDK ,该开发工具包是东软载波微电子开发的、面向 ES32 系列微控制器内核以及外设的一套高集成、易使用、面向过程与对象相结合的驱动库,包括 MD、ALD、BSP、中间层驱动。SDK兼容 CMSIS 标准,可以高效地移植不同的操作系统、文件系统等第三方软件。
      三种驱动库的区别如下:
  • MD 驱动面向过程开发,接近微控制器底层操作,提供用户微控制器寄存器操作简单接口,操作方便;
  • ALD 驱动对微控制器外设做抽象化操作,是一套抽象化的面向对象的驱动,用户无需更多关注底层设备的原理, 只需要调用相关外设的接口函数即可对外设进行操作;
  • BSP 驱动提供了基于 ES32 微控制器开发板 ES-PDS 的驱动。


      由于ALD驱动库进行了单片机底层寄存器的封装,因此更加适合于用户快速开发使用该单片机,因此我选择了该驱动库进行开发。ES32 SDK提供了标准的例程,包括IAR开发工具、Keil开发工具以及东软载波公司自己研发的iDesigner开发工具的例程。
【一】模板工程建立:
      个人习惯了使用Keil进行开发,同时由于提供的模板工程感觉有些冗余,因此便自己重新建立了基于Keil的模板工程文件。具体过程如下:
首先从公司官网下载Keil 5芯片支持包,网址如下:http://www.essemi.com/article/c143.html,安装完成后建立Template样板工程文件夹,并依次建立以下文件夹:

其中Doc为说明文档文件夹,Drivers文件自己添加的外设驱动文件夹,Libraries文件ALD驱动库及CMSIS库文件夹,Project为工程文件夹,User为主程序文件夹。
接下来打开Keil 5软件,建立项目工程,选择ES32F0654LT芯片,该芯片也是板载的芯片型号:

然后建立如下文件结构,这里可以根据个人习惯进行调整:

项目工程设置选项主要部分是宏定义和头文件路径的添加以及选择调试工具和添加目标芯片型号,这里对于习惯使用Keil工具的朋友应该很熟悉:


最终建立完成的工程如下,现在提供给有需要的朋友下载使用。
模板工程: Template.rar (18.87 MB)

【二】板载LED灯及串口UART的测试:
开发板板载两颗LED灯,分为使用PC08及PC09驱动,UART通过JP4和JP5与ES-LINK相连,这样就可以使用ES-LINK的USB串口进行接收和调试。
其中LED部分的代码主要如下:
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.odrv = GPIO_OUT_DRIVE_NORMAL;
        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.odrv = GPIO_OUT_DRIVE_NORMAL;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_CMOS;
        x.func = GPIO_FUNC_1;
        ald_gpio_init(LED2_PORT, LED2_PIN, &x);
}
串口初始化过程代码如下:
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.odrv = GPIO_OUT_DRIVE_NORMAL;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_TTL;
        x.func = GPIO_FUNC_5;
        ald_gpio_init(UART2_TX_PORT, UART2_TX_PIN, &x);

        /* Initialize rx pin */
        x.mode = GPIO_MODE_INPUT;
        x.odos = GPIO_PUSH_PULL;
        x.pupd = GPIO_PUSH_UP;
        x.odrv = GPIO_OUT_DRIVE_NORMAL;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_TTL;
        x.func = GPIO_FUNC_5;
        ald_gpio_init(UART2_RX_PORT, UART2_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             = UART2;
        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);
}
主程序如下:
int main()
{
        /* Initialize ALD */
        ald_cmu_init();
        /* Configure system clock */
        ald_cmu_pll1_config(CMU_PLL1_INPUT_HOSC_3, CMU_PLL1_OUTPUT_48M);
        ald_cmu_clock_config(CMU_CLOCK_PLL1, 48000000);
        
        /* 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);
        }
}
编译下载后即可看到LED闪烁和串口打印的内容:



使用特权

评论回复

相关帖子

沙发
飞舸house| | 2019-12-14 22:40 | 只看该作者
楼主好迅速,我明天也拿回来玩一下。

使用特权

评论回复
板凳
chineseboyzxy| | 2019-12-15 10:52 | 只看该作者
问一下楼主,我的ESLINKII怎么装不上驱动?是不是不支持XP系统了?

使用特权

评论回复
地板
一路向北lm| | 2019-12-15 11:25 | 只看该作者
厉害了,真迅速

使用特权

评论回复
5
hbzjt2011|  楼主 | 2019-12-15 13:31 | 只看该作者
chineseboyzxy 发表于 2019-12-15 10:52
问一下楼主,我的ESLINKII怎么装不上驱动?是不是不支持XP系统了?

这个不太清楚,不过给的SDK里面有USB驱动,你可以手动更新驱动程序试试,路径如下:
ES32_SDK_V1.03\Utilities\usb_windows_drivers

使用特权

评论回复
6
Cjy_JDxy| | 2019-12-15 15:52 | 只看该作者
赵俊涛,哈哈

使用特权

评论回复
7
hbzjt2011|  楼主 | 2019-12-15 17:02 | 只看该作者

哈哈,忘记删掉了

使用特权

评论回复
8
desk1983| | 2019-12-27 22:29 | 只看该作者
楼主,你上传 的程序里面没有LED跟串口部分的程序 呀?
能否上传一下,晚辈不胜感激,多谢

使用特权

评论回复
9
hbzjt2011|  楼主 | 2019-12-30 18:38 | 只看该作者
desk1983 发表于 2019-12-27 22:29
楼主,你上传 的程序里面没有LED跟串口部分的程序 呀?
能否上传一下,晚辈不胜感激,多谢 ...

【东软载波ESF0654 PDS开发板活动】DHT11、RTC和OLED显示
https://bbs.21ic.com/icview-2889010-1-1.html?fromuser=hbzjt2011
(出处: 中国电子网技术论坛)
这里面有

使用特权

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

本版积分规则

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

157

主题

2338

帖子

40

粉丝