新定义MCU开发板测评+免rst一键烧录+串口重定向打印+ADC
免按RST一键烧录功能:
使用开发板调试的时候经常要烧录验证,不断的按rst键非常影响效率,于是想着看能不能不按rst键自动进入复位然后自动下载。
代码:
首先我们把rst信号接入到自己选的P02脚,然后初始化
/*****************************************************
*函数名称: SC_GPIO_Init
*函数功能: GPIO初始化函数
*入口参数:void
*出口参数:void
*****************************************************/
void SC_GPIO_Init(void)
{GPIO_Init(GPIO0, GPIO_PIN_1,GPIO_MODE_OUT_PP);GPIO_Init(GPIO0, GPIO_PIN_2,GPIO_MODE_OUT_PP);GPIO_WriteHigh(P0_2);/*GPIO_Init write here*/
}
一键复位函数:
void auto_FLASH(void)
{if((RX_BUFF[1]==0x01)||(RX_BUFF[2]==0x00)||(RX_BUFF[3]==0x00))//点击“更新程序”串口RX_BUFF会更新,PC会向单片机串口不断发送68 01 00 00 69 16 数据(请求进入BootLoader){GPIO_WriteLow(P0_2);//接单片机复位脚}
}
中断函数:
void USCI1Interrupt() interrupt 15
{ if(USCI1_GetFlagStatus(USCI1_UART_FLAG_RI)){if(rx_flag>=6) rx_flag=0;RX_BUFF[rx_flag]=USCI1_UART_ReceiveData8();rx_flag++;USCI1_UART_SendData8( USCI1_UART_ReceiveData8());//发送完成置0while(USCI1_GetFlagStatus(USCI1_UART_FLAG_TI));USCI1_ClearFlag(USCI1_UART_FLAG_RI);//软件置1}USCI1_ClearFlag(USCI1_UART_FLAG_RI);USCI1_ClearFlag(USCI1_UART_FLAG_TI);}
ADC获取输入电压:
float get_vdd(void)//获取输入电压值
{u16 i=0,time_err=0;u32 adc_value=0;ADC_VrefConfig(ADC_VREF_2_048V);//设置参考电压for(i=0;i<10;i++)//采样次数{ADC_ChannelConfig(ADC_CHANNEL_VDD_D4,ENABLE);ADC_StartConversion();while(!ADC_GetFlagStatus()) //等待 ADC转换完成;{time_err++;if(time_err>=500){ADC_ClearFlag();break;} }ADC_ClearFlag();adc_value+=ADC_GetConversionValue();}adc_value/=10;return (adc_value*0.002);//adc_value*2.048/4096*4 可以提前算出已知变量2.048/4096*4=0.002
}
获取任意ADC通道:
u16 adc_get_value(ADC_Channel_TypeDef ADC_Channel)//获取ADC通道值ADC_CHANNEL_0~ADC_CHANNEL_15
{u16 i=0,time_err=0;u32 adc_value=0;ADC_VrefConfig(ADC_VREF_VDD);//设置参考电压for(i=0;i<10;i++)//采样10次{ADC_ChannelConfig(ADC_Channel,ENABLE);ADC_StartConversion();while(!ADC_GetFlagStatus()) //等待 ADC转换完成;{time_err++;if(time_err>=500) {ADC_ClearFlag();break;}}ADC_ClearFlag();adc_value+=ADC_GetConversionValue();}return adc_value/10;
}
延时和串口重定向:
void delay_10us()
{/*<UserCodeStart>*//*<SinOne-Tag><47>*/unsigned char a,b;for(b=1;b>0;b--)for(a=157;a>0;a--);/*<UserCodeEnd>*//*<SinOne-Tag><47>*/
}
32mhz 延时1msvoid delay_1ms(void)
{/*<UserCodeStart>*//*<SinOne-Tag><26>*/u32 i=579;while(i--);/*<UserCodeEnd>*//*<SinOne-Tag><26>*/
}void delay_ms(u32 i)
{/*<UserCodeStart>*//*<SinOne-Tag><29>*/while(i--){delay_1ms();}/*<UserCodeEnd>*//*<SinOne-Tag><29>*/
}void sendByte(u8 dat)
{/*<UserCodeStart>*//*<SinOne-Tag><103>*/delay_10us();//没有延时会发送失败delay_10us();// delay_1ms();USCI1_UART_SendData8(dat);//发送完成置零while(USCI1_GetFlagStatus(USCI1_UART_FLAG_TI));USCI1_ClearFlag(USCI1_UART_FLAG_TI);// delay_1ms();/*<UserCodeEnd>*//*<SinOne-Tag><103>*/
}void sendString(unsigned char *string)
{/*<UserCodeStart>*//*<SinOne-Tag><105>*/while(*string!='\0') //指针的数据没到最后一位一直执行循环体{ sendByte(*string); //发送指针指向的数据(字节byte)string++; //指针自增,指向下一个数据 }/*<UserCodeEnd>*//*<SinOne-Tag><105>*/
}/*
KEIL里扩展出了b,h,l来对输入字节宽的设置:
(1)b八位
(2)h十六位(默认)
(3)l三十二位
注意包含 #include <stdio.h>
在Keil C51中用printf输出一个单字节变量时要使用%bd,如
unsigned char counter;
printf(“Current count: %bd\n”, counter);//输出8位”十进制有符号整数”
printf(“Current count: %bx\n”, counter);//输出8位”无符号以十六进制表示的整数”
*/
char putchar(char c){sendByte(c);return c;
}/*************************************.Generated by EasyCodeCube.************************************/
main函数:
void main(void)
{ unsigned char b=0;// MCU initSC_Init();while(1){GPIO_WriteLow(P0_1);delay_ms(500);auto_FLASH();printf("\r");printf("%bu,%bu \r",b++,sizeof(b));//%d=short, %bd=char, %ld=long u=unsigned du,bu,luprintf("AIN0_adc= %d,AIN0_voltage= %.2f \r",adc_get_value(ADC_CHANNEL_0),get_vdd()/4096*adc_get_value(ADC_CHANNEL_0));printf("VDD= %.2F \r",get_vdd());GPIO_WriteHigh(P0_1);delay_ms(500);}}
串口打印:
180,1
AIN0_adc= 2639,AIN0_voltage= 3.30
VDD= 5.12 181,1
AIN0_adc= 2637,AIN0_voltage= 3.30
VDD= 5.12 182,1
AIN0_adc= 2639,AIN0_voltage= 3.30
VDD= 5.11
演示视频
新定义MCU开发板测评+免rst一键烧录+串口重定向打印+ADC相关推荐
- 【致敬未来的攻城狮计划】--RA2E1 开发板测评(4)UART通讯
前言 (1)首先感谢 李肯前辈的活动,从而申请到了RA2L1开发板的测评. (2)学习本文之前要具备的知识: [致敬未来的攻城狮计划]--RA2E1 开发板测评(1)keil环境配置: [致敬未来的攻 ...
- [首发] 多方位玩转“地平线新发布AIoT开发板——旭日X3派(Sunrise x3 Pi)” 插电!开机!轻松秒杀!
有幸在发布会前拿到了开发板,可以提前对开发板测试,感受下新品AIoT的魅力.(我这个是体验装,不花钱,需要啥设备他们还得给我买→_→) 下面我将以自己的科研项目经历来对这款芯片进行评估,简单来说,就是 ...
- 【致敬未来的攻城狮计划】--RA2E1 开发板测评(2)LED闪烁
前言 (1)首先感谢 李肯前辈的活动,从而申请到了RA2L1开发板的测评. (2)注意,学习本文之前要学习 瑞萨Renesas RA2L1 开发板测评(1)--keil环境配置: (3)我们拿到开发板 ...
- AB32开发板测评:GPIO控制RGB彩灯
文章目录 [AB32VG1]开发板测评:RGB彩灯 一.初始准备 1.硬件平台 2.软件平台 二.操作步骤 1.RTT环境生成 2.RTT程序编写 3.程序下载,观察现象 三.心得 [AB32VG1] ...
- FPGA新起点V1开发板(二)——Quartus II软件的安装和USB-BLaster驱动安装
文章目录 一.Quartus II软件的安装 二.USB-BLaster驱动安装 一.Quartus II软件的安装 当然,这种东西我要是再写一遍就很无聊了,这里给出方法和连接 视频:Quartus ...
- 海图SD3403开发板测评
今天给大家带来一款高性价比的嵌入式开发板测评--海图HT-SD3403.这是一款基于SD3403芯片设计的嵌入式开发板,最近使用的人很多啊,笔者这里也是买了一块,我们来看一下,他的具体的情况. 首先, ...
- UDI Tegra K1 SOC安卓游戏开发板测评
UDI Tegra K1 SOC安卓游戏开发板测评 据我所知,优地科技的这款开发板是业内首款基于NVIDIA 的Tegra K1主芯片的安卓嵌入式高性能计算开发板,它的强大之处,可能只有亲自体验才能真 ...
- 新唐MCU开发流程解析:从MCU原型设计到样机测试
MCU(Microcontroller Unit)是一种集成电路芯片,具有微处理器.存储器.输入输出端口等多种功能,广泛应用于各种电子设备中.颖特新(颖特新单片机)代理品牌新唐科技是国内领先的MCU芯 ...
- 【Renesas RA6M4开发板之UART与Serial studio串口交互】
[Renesas RA6M4开发板之UART与Serial studio串口交互] 1.0 UART简介 1.1 原理 1.2 访问 PWM 设备 2. RT-theard配置 2.1 硬件需求 2. ...
最新文章
- web.py使用要点
- python教程是什么-Python基础教程_Python入门知识
- sort--排序函数
- Java内存模型深度解析:final--转
- python3读取excel方法封装_Python读取Excel的方法封装
- Oracle10g下载地址
- javaweb学习总结(十):HttpServletRequest对象(一)
- 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)
- php集成环境怎么打开,PHP集成开发环境PhpStorm快速入门指南(二):打开一个项目...
- xml不显示css样式_如何使用CSS显示XML?
- iOS开发 UILabel实现自适应高宽
- python删除特定的几行数据_Python:分成几行,并根据搜索删除特定行 - python
- glassfish 自定义 jaas realm
- 每天一个linux命令
- Set集合之HashSet添加的数据是如何保证不重复的
- 这8款数据恢复软件你见过吗?数据恢复软件推荐
- 计算机专业英语讲课笔记(1)
- Chromium OS Developer Guide
- 10个3d立体字ps金属字图层样式下载
- 「雕爷学编程」Arduino动手做(13)——触摸开关模块