[国产单片机] 【东软载波ES32F369x】ES-PDS评估板熟悉与开发环境搭建

[复制链接]
1160|0
 楼主| hbzjt2011 发表于 2021-1-5 13:03 | 显示全部楼层 |阅读模式
本帖最后由 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
  1. #include "main.h"

  2. void led_pin_init(void)
  3. {
  4.         //LED灯控制端口初始化
  5.         gpio_init_t x;
  6.         
  7.         /* Initialize LED1 */
  8.         x.mode = GPIO_MODE_OUTPUT;
  9.         x.odos = GPIO_PUSH_PULL;
  10.         x.pupd = GPIO_PUSH_UP;
  11.         x.podrv = GPIO_OUT_DRIVE_6;
  12.         x.nodrv = GPIO_OUT_DRIVE_6;
  13.         x.flt  = GPIO_FILTER_DISABLE;
  14.         x.type = GPIO_TYPE_CMOS;
  15.         x.func = GPIO_FUNC_1;
  16.         ald_gpio_init(LED1_PORT, LED1_PIN, &x);

  17.         /* Initialize LED2 */
  18.         x.mode = GPIO_MODE_OUTPUT;
  19.         x.odos = GPIO_PUSH_PULL;
  20.         x.pupd = GPIO_PUSH_UP;
  21.         x.podrv = GPIO_OUT_DRIVE_6;
  22.         x.nodrv = GPIO_OUT_DRIVE_6;
  23.         x.flt  = GPIO_FILTER_DISABLE;
  24.         x.type = GPIO_TYPE_CMOS;
  25.         x.func = GPIO_FUNC_1;
  26.         ald_gpio_init(LED2_PORT, LED2_PIN, &x);
  27. }
uart_usb.c
  1. #include "main.h"

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

  9.         /* Initialize tx pin */
  10.         x.mode = GPIO_MODE_OUTPUT;
  11.         x.odos = GPIO_PUSH_PULL;
  12.         x.pupd = GPIO_PUSH_UP;
  13.         x.podrv = GPIO_OUT_DRIVE_1;
  14.         x.nodrv = GPIO_OUT_DRIVE_0_1;
  15.         x.flt  = GPIO_FILTER_DISABLE;
  16.         x.type = GPIO_TYPE_TTL;
  17.         x.func = GPIO_FUNC_3;
  18.         ald_gpio_init(UART0_TX_PORT, UART0_TX_PIN, &x);

  19.         /* Initialize rx pin */
  20.         x.mode = GPIO_MODE_INPUT;
  21.         x.odos = GPIO_PUSH_PULL;
  22.         x.pupd = GPIO_PUSH_UP;
  23.         x.podrv = GPIO_OUT_DRIVE_1;
  24.         x.nodrv = GPIO_OUT_DRIVE_0_1;
  25.         x.flt  = GPIO_FILTER_DISABLE;
  26.         x.type = GPIO_TYPE_TTL;
  27.         x.func = GPIO_FUNC_3;
  28.         ald_gpio_init(UART0_RX_PORT, UART0_RX_PIN, &x);

  29.         return;
  30. }

  31. void uart_usb_init(void)
  32. {
  33.         /* clear uart_handle_t structure */
  34.         memset(&h_uart, 0x0, sizeof(h_uart));
  35.         /* Initialize pin */
  36.         uart_pin_init();

  37.         /* Initialize uart */
  38.         h_uart.perh             = UART0;
  39.         h_uart.init.baud        = 115200;
  40.         h_uart.init.word_length = UART_WORD_LENGTH_8B;
  41.         h_uart.init.stop_bits   = UART_STOP_BITS_1;
  42.         h_uart.init.parity      = UART_PARITY_NONE;
  43.         h_uart.init.mode        = UART_MODE_UART;
  44.         h_uart.init.fctl        = UART_HW_FLOW_CTL_DISABLE;
  45.         
  46.         ald_uart_init(&h_uart);
  47. }
main.c
  1. #include "main.h"


  2. /** @addtogroup Projects_Templates_ALD
  3.   * @{
  4.   */

  5. /** @addtogroup Templates
  6.   * @{
  7.   */
  8. uart_handle_t h_uart;
  9. uint8_t tx_buf[32];


  10. /**
  11.   * [url=home.php?mod=space&uid=247401]@brief[/url]  This is main function.
  12.   *         Detect running time.
  13.   * @retval Status
  14.   */
  15. int main()
  16. {
  17.         /* Initialize ALD */
  18.         ald_cmu_init();
  19.         /* Configure system clock */
  20.         ald_cmu_pll1_config(CMU_PLL1_INPUT_HOSC_3, CMU_PLL1_OUTPUT_72M);
  21.         ald_cmu_clock_config(CMU_CLOCK_PLL1, 72000000);
  22.         /* Enable peripheral */
  23.         ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE);
  24.         ald_cmu_perh_clock_config(CMU_PERH_UART0, ENABLE);
  25.         
  26.         /* Initialize tx_buf */
  27.         memset(tx_buf, 0x55, sizeof(tx_buf));

  28.         ///* Initialize uart_usb */
  29.         uart_usb_init();
  30.         
  31.         /* Initialize led */
  32.         led_pin_init();
  33.         

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


  @21小跑堂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

365

主题

2971

帖子

45

粉丝
快速回复 在线客服 返回列表 返回顶部
0