使用国产单片机是什么体验?(文末申请开发板测评)

21ic电子网 2020-12-23 00:00

伴随着浓浓的中国芯热情下,国产芯片越来越好了,国产单片机也逐渐成为工程师的优选。


那么用国产单片机开发究竟是怎样的体验?


1、利用东软载波开发板进行ADC及PWM调光测试



这位工程师是来自21ic论坛的用户hbzjt2011,他选用了ES32F0654LT进行这次开发。

ES32F0654LT集成的支持 1 路模数转换器(ADC0)。ADC(Analog to Digital Convertor)是 12 位分辨率的逐次逼近型模数转换器。它具有多达 19 个复用通道,可测量从管脚输入的 16 个外部信号、3 个内部信号。这些通道的模数转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。

ESF0654 PDS开发板ADC接在PB0接口,PB0为ADC0的14通道。



IO引脚配置如下:


static void adc_pin_init(void){ /* Initialize ADC pin */ gpio_init_t x;
/* Initialize PB0 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_0; ald_gpio_init(GPIOB, GPIO_PIN_0, &x);
return;}


ADC0的配置如下:


void adc_init(void){ /* clear lpuart_handle_t structure */ memset(&h_adc, 0x0, sizeof(adc_handle_t)); /* clear adc_nch_conf_t structure */ memset(®_config, 0x0, sizeof(adc_nch_conf_t));
adc_pin_init();
/* Initialize adc */ h_adc.perh = ADC0; h_adc.init.data_align = ADC_DATAALIGN_RIGHT; h_adc.init.scan_mode = DISABLE; h_adc.init.cont_mode = DISABLE; h_adc.init.nch_len = ADC_NCH_LEN_1; h_adc.init.disc_mode = ADC_ALL_DISABLE; h_adc.init.disc_nbr = ADC_DISC_NBR_1; h_adc.init.conv_res = ADC_CONV_RES_10; h_adc.init.clk_div = ADC_CKDIV_128; h_adc.init.neg_ref = ADC_NEG_REF_VSS; h_adc.init.pos_ref = ADC_POS_REF_VDD;
ald_adc_init(&h_adc);
/* Initialize regular convert channel */ reg_config.channel = ADC_CHANNEL_14; reg_config.rank = ADC_NCH_RANK_1; reg_config.samp_time = ADC_SAMPLETIME_4; ald_adc_normal_channel_config(&h_adc, ®_config);
return;}


ES32F0654LT集成通用定时器(GP16C2T)包含一个 16 位自动重载计数器,该计数器由可配置的预分频器驱动。支持 2 路通用定时器(GP16C2T0,GP16C2T1) 。GP16C2T 包含 2 个独立通道。通用定时器(GP16C2T) 的用途广泛,可测量信号脉冲长度(输入捕获)或输出脉冲波形 (比较输出、PWM 及带死区时间插入的互补 PWM)。

本程序中使用了TIM3的1通道,对应引脚为PC6。


IO引脚初始化如下,对应IO的功能3:


static void tim3_pin_init(void){ gpio_init_t GPIO_InitStructure;
/* Initialize tim0 ch1 pin */ GPIO_InitStructure.mode = GPIO_MODE_OUTPUT; GPIO_InitStructure.odos = GPIO_PUSH_PULL; GPIO_InitStructure.pupd = GPIO_PUSH_UP; GPIO_InitStructure.odrv = GPIO_OUT_DRIVE_NORMAL; GPIO_InitStructure.flt = GPIO_FILTER_DISABLE; GPIO_InitStructure.type = GPIO_TYPE_TTL; GPIO_InitStructure.func = GPIO_FUNC_3;
ald_gpio_init(GPIOC, GPIO_PIN_6, &GPIO_InitStructure);
}


TIM3初始化程序如下:


void tim3_init(timer_handle_t *tim_h, timer_oc_init_t *tim_ocinit, timer_clock_config_t *tim_clock){ /* Initialize pin */ tim3_pin_init();
/* Initialize TIM3 */ tim_h->perh = GP16C2T1; tim_h->init.prescaler = 0; tim_h->init.mode = TIMER_CNT_MODE_UP; tim_h->init.period = (uint32_t)(255 - 1); tim_h->init.clk_div = TIMER_CLOCK_DIV1; tim_h->init.re_cnt = 0; ald_timer_pwm_init(tim_h);
/* Initialize clock source */ tim_clock->source = TIMER_SRC_INTER; ald_timer_config_clock_source(tim_h, tim_clock);
/* Common configuration for all channels */ tim_ocinit->oc_mode = TIMER_OC_MODE_PWM1; tim_ocinit->oc_polarity = TIMER_OC_POLARITY_HIGH; tim_ocinit->oc_fast_en = DISABLE; tim_ocinit->ocn_polarity = TIMER_OCN_POLARITY_HIGH; tim_ocinit->ocn_idle = TIMER_OCN_IDLE_RESET; tim_ocinit->oc_idle = TIMER_OC_IDLE_RESET;
/* Set the pulse value for channel 1 */ tim_ocinit->pulse = (uint32_t)(255 * 20 / 100); ald_timer_oc_config_channel(tim_h, tim_ocinit, TIMER_CHANNEL_1);
/* Set the pulse value for channel 2 */ tim_ocinit->pulse = (uint32_t)(255 * 50 / 100); ald_timer_oc_config_channel(tim_h, tim_ocinit, TIMER_CHANNEL_2);
/* Start input pwm from tim2/3 channel 1 */ ald_timer_oc_start(tim_h, TIMER_CHANNEL_1);
}


主程序实现了根据ADC采用进行PWM调节控制外部导光板的亮度:


 /* ADC测试 */ value = adc_average(); sprintf((char *)tx_buf, "ADC_Value: %d \n", value); ald_uart_send(&h_uart, tx_buf, sizeof("ADC_Value: %d \n"), 1000); 
/* TIM3 PWM测试 */ duty = value/32.72; if(duty <= 1) duty = 1; ald_timer_pwm_set_duty(&tim3.tim_h, TIMER_CHANNEL_1, (uint16_t)duty);


2、利用东软载波开发板进行DHT11、RTC和OLED显示



依然是来自21ic论坛的用户hbzjt2011,这个应用他选用了东软载波的ESF0654 PDS。

【一】DHT11和RTC模块部分代码:
该模块的驱动只要对原有SDK程序进行简单移植即可,主要是对IO管脚的配置。
dht11.c


/** * @defgroup DHT11_Public_Functions dht11 Public Functions * [url=home.php?mod=space&uid=247401]@brief[/url] BSP DHT11 Functions * @verbatim =============================================================================== ##### BSP DHT11 Functions ##### =============================================================================== [..] This section provides functions allowing to: (+) Initialize bsp dht11. (+) get dht11 data.

@endverbatim * @{ */

/** * [url=home.php?mod=space&uid=247401]@brief[/url] get dht11 data * @retval result 1 or 0 */uint8_t dht11_read_data(uint8_t *temp, uint8_t *humi){ uint8_t buf[5] = {0}; uint8_t i;

dht11_reset();

if (dht11_check() == 0) { for (i = 0; i < 5; i++) buf[i] = dht11_read_byte();

if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]) { *humi = buf[0]; *temp = buf[2]; } } else return 1;

return 0;}

/** * @brief init dht11 * @retval result 1 or 0 */uint8_t dht11_init(void){ dht11_pin_init(); ald_delay_ms(100); dht11_reset();

return dht11_check();}


rtc.c


/** * @brief rtc module initialize function * @retval None */void rtc_init(void *rtc_param){ rtc_param_t *p_rtc = (rtc_param_t *)rtc_param;
/* Initialize RTC */ p_rtc->init.asynch_pre_div = 0; p_rtc->init.synch_pre_div = 32767; p_rtc->init.hour_format = RTC_HOUR_FORMAT_24; p_rtc->init.output = RTC_OUTPUT_DISABLE; p_rtc->init.output_polarity = RTC_OUTPUT_POLARITY_HIGH; ald_rtc_init(&p_rtc->init);
/* Set current time and date */ p_rtc->time.hour = 18; p_rtc->time.minute = 31; p_rtc->time.second = 43; p_rtc->time.sub_sec = 123; p_rtc->date.day = 15; p_rtc->date.month = 12; p_rtc->date.year = 19; p_rtc->date.week = 7; ald_rtc_set_time(&p_rtc->time, RTC_FORMAT_DEC); ald_rtc_set_date(&p_rtc->date, RTC_FORMAT_DEC);
/* Enable second interrupt */ ald_rtc_interrupt_config(RTC_IT_SEC, ENABLE);}


【二】OLED显示屏模块:
这里使用了OLED12864显示液晶,采用模拟IIC进行驱动,便于程序的移植。


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();
/* Initialize led */ dht11_init();
/* Initialize oled */ OLED_Init();
/* Initialize rtc */ rtc_init(&rtc_h);
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);
/* LED灯测试 */ cnt++; if(cnt == 5) { ald_gpio_write_pin(LED1_PORT, LED1_PIN, 0); ald_gpio_write_pin(LED2_PORT, LED2_PIN, 0); sprintf((char *)tx_buf, "LED ON "); OLED_P8x16Str(0u,4u,(uint8_t *)tx_buf); //ald_delay_ms(1000); }else if(cnt == 10) { ald_gpio_write_pin(LED1_PORT, LED1_PIN, 1); ald_gpio_write_pin(LED2_PORT, LED2_PIN, 1); sprintf((char *)tx_buf, "LED OFF"); OLED_P8x16Str(0u,4u,(uint8_t *)tx_buf); //ald_delay_ms(1000); cnt = 0; }
/* DHT11温湿度传感器测试 */ dht11_read_data(&temp, &humi); sprintf((char *)tx_buf, "Temp: %d Humi: %d \n", temp, humi); ald_uart_send(&h_uart, tx_buf, sizeof("Temp: %d Humi: %d \n"), 1000);
/* RTC测试 */ ald_rtc_get_time(&rtc_v, RTC_FORMAT_DEC); sprintf((char *)tx_buf, "Time:%02d-%02d-%02d", rtc_v.hour, rtc_v.minute, rtc_v.second); OLED_P8x16Str(0u,6u,(uint8_t *)tx_buf);
/* OLED显示屏测试 */ OLED_P8x16Str(0u,0u,(uint8_t *)"ES32 PDS BOARD"); sprintf((char *)tx_buf, "Temp:%d Humi:%d", temp, humi); OLED_P8x16Str(0u,2u,(uint8_t *)tx_buf); //OLED_P8x16Str(0u,6u,(uint8_t *)"Date:2019-12-15"); }}


看完是不是手痒痒,
跃跃欲试!
这位大佬使用的是ESF0654 PDS

而现在!
东软载波带着他的 最新开发板
ES32F369X开发板
邀请你来测评!

开发板免费用!

具体介绍如下:

市场上微控制器种类繁多,许多用户开始从8位和16位转而使用基于ARM Cortex-M的芯片产品。此次开发板评测活动,上海东软载波微电子有限公司推出的是ES-PDS覆盖全新的32位MCU--ES32F369x/ES32F366x/ES32F365x芯片。


ES32产品使用“原型开发系统” (Prototype development system)是具有统一接口规范的一系列开发板。可支持客户学习essemi ES32F系列32位MCU芯片和原形系统开发。

ES-PDS覆盖ES32全系列的芯片,essemi每款芯片都有一款与之对应的开发板,通过ES-PDS可以用户的开发以及学习做到支持。


不仅如此

除了免费用开发板

对于测评优秀的玩家

我们还奉上丰盛好礼



扫码或点击阅读原文进行报名

21ic电子网 即时传播最新电子科技信息,汇聚业界精英精彩视点。
评论
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 116浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 93浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 202浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 119浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 141浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 98浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 124浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 58浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 164浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 69浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 61浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 222浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 158浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 92浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 106浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦