php发展

首页 » 常识 » 诊断 » 使用国产单片机是什么体验文末申请开发板
TUhjnbcbe - 2021/1/17 9:23:00
临床研究白癜风专家 http://disease.39.net/bjzkbdfyy/170615/5460831.html

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

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

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

这位工程师是来自21ic论坛的用户hbzjt,他选用了ES32FLT进行这次开发。ES32FLT集成的支持1路模数转换器(ADC0)。ADC(AnalogtoDigitalConvertor)是12位分辨率的逐次逼近型模数转换器。它具有多达19个复用通道,可测量从管脚输入的16个外部信号、3个内部信号。这些通道的模数转换可在单次、连续、扫描或不连续采样模式下进行。ADC的结果存储在一个左对齐或右对齐的16位数据寄存器中。ESFPDS开发板ADC接在PB0接口,PB0为ADC0的14通道。

IO引脚配置如下:

staticvoidadc_pin_init(void){/*InitializeADCpin*/gpio_init_tx;/*InitializePB0pin*/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的配置如下:

voidadc_init(void){/*clearlpuart_handle_tstructure*/memset(h_adc,0x0,sizeof(adc_handle_t));/*clearadc_nch_conf_tstructure*/memset(?_config,0x0,sizeof(adc_nch_conf_t));adc_pin_init();/*Initializeadc*/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_;h_adc.init.neg_ref=ADC_NEG_REF_VSS;h_adc.init.pos_ref=ADC_POS_REF_VDD;ald_adc_init(h_adc);/*Initializeregularconvertchannel*/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;}ES32FLT集成通用定时器(GP16C2T)包含一个16位自动重载计数器,该计数器由可配置的预分频器驱动。支持2路通用定时器(GP16C2T0,GP16C2T1)。GP16C2T包含2个独立通道。通用定时器(GP16C2T)的用途广泛,可测量信号脉冲长度(输入捕获)或输出脉冲波形(比较输出、PWM及带死区时间插入的互补PWM)。本程序中使用了TIM3的1通道,对应引脚为PC6。IO引脚初始化如下,对应IO的功能3:

staticvoidtim3_pin_init(void){gpio_init_tGPIO_InitStructure;/*Initializetim0ch1pin*/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初始化程序如下:

voidtim3_init(timer_handle_t*tim_h,timer_oc_init_t*tim_ocinit,timer_clock_config_t*tim_clock){/*Initializepin*/tim3_pin_init();/*InitializeTIM3*/tim_h-perh=GP16C2T1;tim_h-init.prescaler=0;tim_h-init.mode=TIMER_CNT_MODE_UP;tim_h-init.period=(uint32_t)(-1);tim_h-init.clk_div=TIMER_CLOCK_DIV1;tim_h-init.re_cnt=0;ald_timer_pwm_init(tim_h);/*Initializeclocksource*/tim_clock-source=TIMER_SRC_INTER;ald_timer_config_clock_source(tim_h,tim_clock);/*Commonconfigurationforallchannels*/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;/*Setthepulsevalueforchannel1*/tim_ocinit-pulse=(uint32_t)(*20/);ald_timer_oc_config_channel(tim_h,tim_ocinit,TIMER_CHANNEL_1);/*Setthepulsevalueforchannel2*/tim_ocinit-pulse=(uint32_t)(*50/);ald_timer_oc_config_channel(tim_h,tim_ocinit,TIMER_CHANNEL_2);/*Startinputpwmfromtim2/3channel1*/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"),0);/*TIM3PWM测试*/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论坛的用户hbzjt,这个应用他选用了东软载波的ESFPDS。DHT11和RTC模块部分代码:该模块的驱动只要对原有SDK程序进行简单移植即可,主要是对IO管脚的配置。dht11.c

/***

defgroupDHT11_Public_Functionsdht11PublicFunctions*

brief
BSPDHT11Functions*

verbatim===============================================================================#####BSPDHT11Functions#####===============================================================================[..]Thissectionprovidesfunctionsallowingto:(+)Initializebspdht11.(+)getdht11data.

endverbatim*

{*//***

brief
getdht11data*

retvalresult1or0*/uint8_tdht11_read_data(uint8_t*temp,uint8_t*humi){uint8_tbuf[5]={0};uint8_ti;dht11_reset();if(dht11_check()==0){for(i=0;i5;i++)buf=dht11_read_byte();if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){*humi=buf[0];*temp=buf[2];}}elsereturn1;return0;}/***

briefinitdht11*

retvalresult1or0*/uint8_tdht11_init(void){dht11_pin_init();ald_delay_ms();dht11_reset();returndht11_check();}

rtc.c

/***

briefrtcmoduleinitializefunction*

retvalNone*/voidrtc_init(void*rtc_param){rtc_param_t*p_rtc=(rtc_param_t*)rtc_param;/*InitializeRTC*/p_rtc-init.asynch_pre_div=0;p_rtc-init.synch_pre_div=;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);/*Setcurrenttimeanddate*/p_rtc-time.hour=18;p_rtc-time.minute=31;p_rtc-time.second=43;p_rtc-time.sub_sec=;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);/*Enablesecondinterrupt*/ald_rtc_interrupt_config(RTC_IT_SEC,ENABLE);}

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

intmain(){/*InitializeALD*/ald_cmu_init();/*Configuresystemclock*/ald_cmu_pll1_config(CMU_PLL1_INPUT_HOSC_3,CMU_PLL1_OUTPUT_48M);ald_cmu_clock_config(CMU_CLOCK_PLL1,);/*Initializetx_buf*/memset(tx_buf,0x55,sizeof(tx_buf));/*Initializeuart_usb*/uart_usb_init();/*Initializeled*/led_pin_init();/*Initializeled*/dht11_init();/*Initializeoled*/OLED_Init();/*Initializertc*/rtc_init(rtc_h);while(1){/*Sendamessage*///sprintf((char*)tx_buf,"es32uarttest!\n");//ald_uart_send(h_uart,tx_buf,sizeof("es32uarttest!\n"),0);/*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,"LEDON");OLED_P8x16Str(0u,4u,(uint8_t*)tx_buf);//ald_delay_ms(0);}elseif(cnt==10){ald_gpio_write_pin(LED1_PORT,LED1_PIN,1);ald_gpio_write_pin(LED2_PORT,LED2_PIN,1);sprintf((char*)tx_buf,"LEDOFF");OLED_P8x16Str(0u,4u,(uint8_t*)tx_buf);//ald_delay_ms(0);cnt=0;}/*DHT11温湿度传感器测试*/dht11_read_data(temp,humi);sprintf((char*)tx_buf,"Temp:%dHumi:%d\n",temp,humi);ald_uart_send(h_uart,tx_buf,sizeof("Temp:%dHumi:%d\n"),0);/*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*)"ES32PDSBOARD");sprintf((char*)tx_buf,"Temp:%dHumi:%d",temp,humi);OLED_P8x16Str(0u,2u,(uint8_t*)tx_buf);//OLED_P8x16Str(0u,6u,(uint8_t*)"Date:-12-15");}}看完是不是手痒痒,跃跃欲试!这位大佬使用的是ESFPDS而现在!东软载波带着他的最新开发板ES32FX开发板邀请你来测评!开发板免费用!具体介绍如下:市场上微控制器种类繁多,许多用户开始从8位和16位转而使用基于ARMCortex-M的芯片产品。此次开发板评测活动,上海东软载波微电子有限公司推出的是ES-PDS覆盖全新的32位MCU--ES32Fx/ES32Fx/ES32Fx芯片。ES32产品使用“原型开发系统”(Prototypedevelopmentsystem)是具有统一接口规范的一系列开发板。可支持客户学习essemiES32F系列32位MCU芯片和原形系统开发。ES-PDS覆盖ES32全系列的芯片,essemi每款芯片都有一款与之对应的开发板,通过ES-PDS可以用户的开发以及学习做到支持。不仅如此

除了免费用开发板

对于测评优秀的玩家

我们还奉上丰盛好礼

扫码或点击阅读原文进行报名预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: 使用国产单片机是什么体验文末申请开发板