- 2022-06-22
-
回复了主题帖:
【树莓派Pico测评】 串口通讯功能及其测试
wyleo 发表于 2022-6-22 10:21
请教楼主,是每次都自定义一次PIN的管脚吗?还是定义一次,后面就直接用minicom,可以查看串口输出的内容呀 ...
视需要,在使用前定义一次PIN的管脚即可。
- 2022-06-15
-
回复了主题帖:
【兆易GD32F310测评】+交互式检测装置
芯片老兵 发表于 2022-6-15 10:16
有没有这颗的产品手册,详细学习一下,谢谢分享。
这颗的产品手册?
- 2022-06-14
-
发表了主题帖:
【兆易GD32F310测评】+交互式检测装置
该交互检测装置以GD32F310开发板为核心,由迪文智能屏充当交互式桥梁,并结合数字式传感器的使用来实现。
之所以由迪文智能屏充当交互式桥梁是因为,它是一款触摸式的智能屏,能快速完成高质量的界面设计,且可以通过串行通讯来交换信息。
在这里其使用的界面形式如图1和图2所示,其中的显示界面主要由于显示当前的系统设计,设置界面则是用于设置或调整系统时间。
在信息交换过程中,所涉及的串行通讯内容参见“UART的应用”一贴。
图1 显示界面 图2 设置界面
1)时间显示
由于迪文智能屏并没有独立的电子时钟计时功能,故所显示的系统时间是由开发板的片内RTC来完成,并由串口发送到显示屏来显示。
关于RTC的使用,可参考“RTC的使用”的帖子,向显示屏发送时间值的形式如图3所示。其中“30 38 3A 33 35 3A 34 36”就表示所要显示的时间为“08:35:46”,而“5A A5 0B 82 10 20”则是向变量地址10 20发送数据以更新显示内容。
图3 发送时间值
2)检测值显示
该装置所涉及的检测目标是环境的温度、气压及光照强度。所使用的传感器是温度大气压传感器BMP085和光照强度传感器BH1750,其实现的方法可以参考“传感器检测”的帖子,这里就不再详细介绍。
向显示屏发送光照值的形式如图4所示,其中“5A A5 05 82 12 04”的作用是向变量地址1204发送数据“03 E8”,即光照值为1000 lx。
图4发送光照值
3)参数设置
我们不但可以通过发送数据来更新显示内容,还可以从显示屏读取数据,这样就可以实现参数的设置。
以读取日期的设置值为例,其指令为“5A A5 04 83 10 00 05”。在返回的数据中,“32 30 32 32 2D 30 33 2D 30 36”即为日期值“2022-03-06”,见图5所示。
图5 读取日期变量
若使用指令“5A A5 04 83 10 20 04”,则可读取时间变量的数据,其中“31 30 3A 33 30 3A 30 30”位时间值“10: 30:00”,见图6所示。
图6读取时间变量
这样就可完成一个交互式检测装置的制作,当然还可以利用迪文智能屏的波形显示功能将检测的数据直接以波形曲线的形式显示出来,这里就不再详细予以介绍。总之,GD32F310开发板在使用方面还是十分顺手的,有利用提高开发的效率。
- 2022-06-11
-
回复了主题帖:
【兆易GD32F310测评】+传感器检测
yang8555u 发表于 2022-6-10 16:51
Wow,居然用的是软件I2C,是因为硬件I2C有缺陷才不用吗?
这到不是,只是这一样用着比较方便不受引脚位置的限制,功能移植比较块。
- 2022-06-08
-
发表了主题帖:
【兆易GD32F310测评】+传感器检测
为了进行环境方面的检测,对光强传感器及温度大气压传感器的驱动程序进行了移植,经验证在GD32F310开发板上进行功能验证是十分方便的,能在半小时左右完成。
对光强传感器的测试结果如图1所示,该传感器所连接的引脚为PB0和PB1,具体的对应关系为:
CLK --PB0
DIN--PB1
图1 光强检测效果
使用GPIO口模拟高低电平输出及引脚状态读取的语句定义为:
#define SCL_Clr1() gpio_bit_write(GPIOB, GPIO_PIN_0, RESET)
#define SCL_Set1() gpio_bit_write(GPIOB, GPIO_PIN_0, SET)
#define SDA_Clr1() gpio_bit_write(GPIOB, GPIO_PIN_1, RESET)
#define SDA_Set1() gpio_bit_write(GPIOB, GPIO_PIN_1, SET)
#define IIC_SDA_IN1 gpio_input_bit_get(GPIOB, GPIO_PIN_1)
对引脚进行初始化配置的函数如下:
void BH1750_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0|GPIO_PIN_1);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0|GPIO_PIN_1);
gpio_bit_reset(GPIOB, GPIO_PIN_0);
gpio_bit_reset(GPIOB, GPIO_PIN_1);
}
实现输入与输出模式切换的2个函数为:
void IIC_INPUT_MODE()
{
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_1);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
}
void IIC_OUTPUT_MODE()
{
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
}
以GPIO口模拟I2C方式字节数据的函数如下:
void BH1750_SendByte(char data)
{
char i;
IIC_OUTPUT_MODE();
SCL_Clr1();
delay_us(2);
for (i=0;i<8;i++)
{
if(data&0x80) SDA_Set1();
else SDA_Clr1();
data <<= 1;
SCL_Set1();
delay_us(2);
SCL_Clr1();
delay_us(2);
}
}
实现光强检测与显示的函数为:
void Get_Sunlight_Value()
{
int dis_data=0;
float temp;
unsigned int sd;
Single_Write_BH1750(0x01);
Single_Write_BH1750(0x10);
delay_1ms(180);
Multiple_Read_BH1750();
dis_data=BUF[0];
dis_data=(dis_data<<8)+BUF[1];
temp=(float) dis_data/1.2;
sd=temp;
OLED_ShowNum(20,6,sd,5,16);
}
实现图1所示效果的主程序为:
int main(void)
{
systick_config();
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6|GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6|GPIO_PIN_7);
gpio_bit_reset(GPIOB, GPIO_PIN_6);
gpio_bit_reset(GPIOB, GPIO_PIN_7);
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"GD32F310G",16);
OLED_ShowString(20,2,"OLED & BH1750",16);
OLED_ShowString(20,4,"Sunlight=",16);
OLED_ShowString(68,6,"lx",16);
BH1750_Init();
while(1){
Get_Sunlight_Value();
delay_1ms(1000);
}
}
以光强检测为基础,对温度大气压的检测就顺利相对,其在GPIO口的使用、输入与输出模式的切换函数、高低电平的输出及引脚状态检测均是相似的。
两者的主要差别,则是在数据读取与辅助函数方面,温度大气压的测试效果如图2所示。
图2 温度大气压检测效果
对温度大气压传感器的初始化函数为:
void Init_BMP085()
{
ac1 = Multiple_read(0xAA);
ac2 = Multiple_read(0xAC);
ac3 = Multiple_read(0xAE);
ac4 = Multiple_read(0xB0);
ac5 = Multiple_read(0xB2);
ac6 = Multiple_read(0xB4);
b1 = Multiple_read(0xB6);
b2 = Multiple_read(0xB8);
mb = Multiple_read(0xBA);
mc = Multiple_read(0xBC);
md = Multiple_read(0xBE);
}
实现温度大气压检测及数值转换的函数如下:
void bmp085Convert()
{
unsigned int ut;
unsigned long up;
long x1, x2, b5, b6, x3, b3, p;
unsigned long b4, b7;
ut = bmp085ReadTemp();
up = bmp085ReadPressure();
x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
x2 = ((long) mc << 11) / (x1 + md);
b5 = x1 + x2;
temperature = ((b5 + 8) >> 4);
b6 = b5 - 4000;
x1 = (b2 * (b6 * b6)>>12)>>11;
x2 = (ac2 * b6)>>11;
x3 = x1 + x2;
b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
x1 = (ac3 * b6)>>13;
x2 = (b1 * ((b6 * b6)>>12))>>16;
x3 = ((x1 + x2) + 2)>>2;
b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
b7 = ((unsigned long)(up - b3) * (50000>>OSS));
if (b7 < 0x80000000)
p = (b7<<1)/b4;
else
p = (b7/b4)<<1;
x1 = (p>>8) * (p>>8);
x1 = (x1 * 3038)>>16;
x2 = (-7357 * p)>>16;
pressure = p+((x1 + x2 + 3791)>>4);
}
实现图2所示效果的主程序为:
int main(void)
{
systick_config();
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6|GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6|GPIO_PIN_7);
gpio_bit_reset(GPIOB, GPIO_PIN_6);
gpio_bit_reset(GPIOB, GPIO_PIN_7);
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"GD32F310G",16);
OLED_ShowString(20,2,"OLED & bmp085",16);
OLED_ShowString(20,4,"t= C",16);
OLED_ShowString(20,6,"p= KPa",16);
BMP085_Init();
Init_BMP085();
while(1){
bmp085Convert();
OLED_ShowNum(44,4,temperature/10,3,16);
OLED_ShowNum(44,6,pressure/100,5,16);
delay_1ms(1000);
}
}
实践证明GD32F310在功能验证方面还是十分方便的,能够将其它MCU上的功能快速移植到该芯片上来实现设计目标。
- 2022-06-04
-
回复了主题帖:
【兆易GD32F310测评】+ UART的应用
ZanbaTea 发表于 2022-6-3 22:35
感谢版主大大的分享!共同学习共同进步,加油!加油!
- 2022-05-31
-
回复了主题帖:
【兆易GD32F310测评】+ UART的应用
lugl4313820 发表于 2022-5-30 08:19
很好的教程,谢谢分享。
感谢支持!!!
-
回复了主题帖:
【兆易GD32F310测评】+ UART的应用
芯片老兵 发表于 2022-5-31 13:52
谢谢楼主分享,学习到了,希望有机会多交流这些。
- 2022-05-30
-
发表了主题帖:
【兆易GD32F310测评】+ UART的应用
本帖最后由 jinglixixi 于 2022-5-30 00:17 编辑
GD32F310配有2个 USART在内的标准和高级通信接口,使用它可以进行调试输出及串口设备间的通讯等。
1. printf输出
要实现printf输出,要涉及引脚的配置、串口通信的配置等,该工作主要有函数usart0_gpio_config()、
usart0_config()及fputc()来完成,其内容如下:
void usart0_gpio_config(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
/* connect port to USARTx_Tx */
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);
/* connect port to USARTx_Rx */
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);
}
void usart0_config(void)
{
rcu_periph_clock_enable(RCU_USART0);
usart_deinit(USART0);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_baudrate_set(USART0, 115200U);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}
int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t) ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
return ch;
}
有了以上函数的支持,就可实现printf输出的功能,其测试效果如图1所示。
图1 输出测试
实现输出测试的主程序为:
int main(void)
{
systick_config();
usart0_gpio_config();
usart0_config();
printf("usart transmit test example!");
while(1);
}
2. 发送字符
在串行通讯中,发送各种指令和参数是十分常见的,也是十分有用的。使用函数库中的函数usart_data_transmit)就可解决该问题,若是发送指令,还可将指令存放到数组中来简化处理。
实现发送字符的测试程序如下:
int main(void)
{
systick_config();
usart0_gpio_config();
usart0_config();
printf("usart transmit test example!");
while(1){
delay_1ms(1000);
usart_data_transmit(USART0, 'A');
}
}
经下载测试,其测试效果如图2所示,说明功能正常。
图2发送字符
3.收发处理
在串行通讯中,设备间的收发应答是十分重要的,它可以保障设备间的可靠运行。
使用接收函数usart_data_receive()即可完成收发处理的测试,其测试程序如下:
int main(void)
{
uint16_t m,p;
systick_config();
usart0_gpio_config();
usart0_config();
while(1){
m=usart_data_receive(USART0);
if(m!=p)
{
usart_data_transmit(USART0, m);
p=m;
}
}
}
进行程序下载,其测试效果如图3所示,即每发送一个不一致的字符就回显出相应的内容。
图3 字符接收与发送
- 2022-05-25
-
回复了主题帖:
【兆易GD32F310测评】+RTC的使用
lugl4313820 发表于 2022-5-24 06:20
RTC时钟,很实用的,谢谢分享,职业测评专家呀。
岂敢,岂敢!
- 2022-05-23
-
发表了主题帖:
【兆易GD32F310测评】+RTC的使用
本帖最后由 jinglixixi 于 2022-5-23 23:31 编辑
在开发板的例程中,提供了RTC的测试程序,它是通过串口来显示输出内容,并可用串口来设置RTC的初试值及闹钟提示参数,其测试效果如图1所示。
图1测试效果
在进行程序修改后,则可实现计时功能,效果如图2所示。
图2 RTC计时
修改后的显示函数为:
void rtc_show_time(void)
{
rtc_current_time_get(&rtc_initpara);
time_subsecond = rtc_subsecond_get();
printf("Current time: %0.2x:%0.2x:%0.2x \r\n", \
rtc_initpara.rtc_hour, rtc_initpara.rtc_minute, rtc_initpara.rtc_second);
}
相应的主程序为:
int main(void)
{
systick_config();
usart0_gpio_config();
usart0_config();
printf("\n\r ****************** RTC calendar alarm demo ******************\n\r");
rcu_periph_clock_enable(RCU_PMU);
pmu_backup_write_enable();
rtc_pre_config();
if(BKP_VALUE != RTC_BKP0) {
rtc_setup();
} else {
if(RESET != rcu_flag_get(RCU_FLAG_PORRST)) {
printf("power on reset occurred....\n\r");
} else if(RESET != rcu_flag_get(RCU_FLAG_EPRST)) {
printf("external reset occurred....\n\r");
}
printf("no need to configure RTC....\n\r");
rtc_flag_clear(RTC_STAT_ALRM0F);
exti_flag_clear(EXTI_17);
rtc_show_time();
rtc_show_alarm();
}
while(1){
rtc_show_time();
delay_1ms(1000);
}
}
在添加OLED屏显示驱动的情况下,只需修改显示程序即可实现图3所示的显示效果。
相应的显示函数为:
void rtc_show_time(void)
{
rtc_current_time_get(&rtc_initpara);
time_subsecond = rtc_subsecond_get();
OLED_ShowNum(20,4,rtc_initpara.rtc_hour/16*10+rtc_initpara.rtc_hour%16,2,16);
OLED_ShowNum(44,4,rtc_initpara.rtc_minute/16*10+rtc_initpara.rtc_minute%16,2,16);
OLED_ShowNum(68,4,rtc_initpara.rtc_second/16*10+rtc_initpara.rtc_second%16,2,16);
}
图3 RTC电子时钟
配合前面介绍过的RTC参数设置,就可构成一个完整的RTC电子时钟。
- 2022-05-19
-
回复了主题帖:
【兆易GD32F310测评】+ADC数据采集
wangerxian 发表于 2022-5-18 20:34
国产芯片,还是要多一些测试,这样可以为以后更换国产芯片打下良好的基础。
同感!!!
- 2022-05-18
-
回复了主题帖:
【兆易GD32F310测评】+ADC数据采集
xujinghua3648 发表于 2022-5-18 13:58
谢谢分享,很好的示例,最近在考虑更换STM32芯片替换,后边可能会用到
感谢支持!!!
-
回复了主题帖:
【兆易GD32F310测评】+ADC数据采集
lugl4313820 发表于 2022-5-18 08:39
谢谢分享。
-
发表了主题帖:
【兆易GD32F310测评】+ADC数据采集
GD32F310G开发板配有1个12位ADC,可进行6位、8位、10位及12位的数据采集,进行8位数据采集的效果见下图所示。
8位数据采集效果图
要进行A/D数据采集,主要涉及下面3个函数,即rcu_config()、gpio_config()及adc_config()。
以使用PA2来采集外部模拟信号的程序如下,其采集精度为8位数据。
void rcu_config(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_ADC);
rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);
}
void gpio_config(void)
{
gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_2);
}
void adc_config(void)
{
adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);
adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U);
adc_regular_channel_config(0U, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);
adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
adc_resolution_config(ADC_RESOLUTION_8B);
adc_enable();
delay_1ms(1U);
adc_calibration_enable();
}
实现OLED屏显示检测数据的主程序为:
int main(void)
{
systick_config();
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
gpio_bit_reset(GPIOA, GPIO_PIN_1);
gd_eval_led_init(LED1);
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_6|GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6|GPIO_PIN_7);
gpio_bit_reset(GPIOB, GPIO_PIN_6);
gpio_bit_reset(GPIOB, GPIO_PIN_7);
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"GD32F310G",16);
OLED_ShowString(20,2,"OLED & ADC ",16);
rcu_config();
gpio_config();
adc_config();
adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
while(1){
adc_flag_clear(ADC_FLAG_EOC);
while(SET != adc_flag_get(ADC_FLAG_EOC)) {
}
adc_value = ADC_RDATA;
OLED_ShowNum(20,4,adc_value,4,16);
delay_1ms(1000);
}
}
- 2022-05-17
-
回复了主题帖:
【平头哥RVB2601创意应用开发】+语音提示型环境状态检测记录仪
wangerxian 发表于 2022-5-17 10:05
如果扩展SD卡或Flash,把音频存在SD或Flash应该可行吧。
如果有SD卡支持的会好些,在容量上受制约比较小,使用Flash在容量允许的情况下,用起来比较方便,可以随用随取,无需为响应速度而设置缓存。
-
回复了主题帖:
【平头哥RVB2601创意应用开发】+语音提示型环境状态检测记录仪
wangerxian 发表于 2022-5-17 09:03
还不少,只用单片机内部ROM存不了多少语音数据。
没错,用这种方式不适合用来进行数据的语音播报,原打算的语音播报功能只能放弃。
-
加入了学习《2022 Digi-Key 物联网创新大赛》,观看 Digi-Key 物联网创新大赛
- 2022-05-16
-
回复了主题帖:
【平头哥RVB2601创意应用开发】+语音提示型环境状态检测记录仪
wangerxian 发表于 2022-5-16 13:51
开机那一段话,一共占了多少个字节?
9873 Byte
-
发表了主题帖:
【平头哥RVB2601创意应用开发】+语音提示型环境状态检测记录仪
本帖最后由 jinglixixi 于 2022-5-18 11:00 编辑
项目背景
环境是影响我们的重要生存条件,因而对它的状态检测是一件十分必要的事情。反应环境状态的参数有多种,这里仅选取温度、光照强度、大气压为主要检测对象。此外,为了便于确定数据采集的时间点,还配有RTC 实时时钟及检测数据的文本文件记录功能,从而构成一个功能相对完备的环境状态检测装置。
作品简介
作品简介:
本作品是一款针对温度、光照强度、大气压等环境状态进行检测的装置,并基于平头哥RVB2601开发板来设计,其外观如图1所示。所使用的环境检测器件为光照强度传感器BH1750及温度大气压传感器BMP085,其显示功能利用板载LCD显示屏,其测试输入是使用开发板上的2个按键,其语音提示功能是板载的音频功能单元。
为进行检测数据的记录,是通过串口将检测数据发送到串行数据记录模块,并文本文件的方式加以保存。
图1作品照片
系统框图
该作品的系统框图如图2所示,共有8个部分组成,其中光照强度传感器BH1750、温度大气压传感器BMP085及串行数据记录模块为自行扩展部分。
其中,扩展部分所占用的引脚资源为:
BH1750:
SCL--- PA7
SDA--- PA25
BMP085:
SCL--- PA4
SDA--- PA31
串行数据记录模块:
RXD ---PA23
图2 系统框图
各部分功能说明和解析
1. LCD屏显示
在显示方面,可使用开发板所配备的LCD屏来完成。由于其显示功能相对简单,故对其显示功能进行了较大的功能扩展,如添加了字符与字符串显示函数、数值显示函数、中文字库及显示函数等,其显示效果可参见图1所示。
2. RTC计时与设置
为标记检测数据的时间点,使用了CH2601的片内RTC计时器,并提供了检测前的RTC设置功能,以确保显示时间的准确性,其显示效果如图3所示。
在设置时间时,K1键是用于调整数值,K2键则是用于确认处理。在进行检测内容切换时,RTC的实时显示功能是不发生改变的。
图3电子时钟
3. 语音播放功能
为了发挥开发板的语音处理功能,在开机时采用了语音提示的方式来介绍作品的功能。其播放的内容是先由金舟文字语音转换软件来生成MP3文件,在由DataToHex软件生成数组数据以存放到程序中来供播放时使用,见图4所示。
图4获取音频数据
4. 光强检测功能
光强检测是由传感器BH1750来实现,该器件是一款I2C接口的器件,为便于灵活地使用引脚资源,这里是GPIO口模拟I2C的方式来驱动该传感器,其检测效果如图5所示。
图5光强检测效果
5. 温度大气压检测
温度大气压检测是由传感器BMP085来实现,该器件是一款I2C接口的器件,为便于灵活地使用引脚资源,这里是GPIO口模拟I2C的方式来驱动该传感器,其检测效果如图6所示。
图6温度气压检测效果
6. 串行通讯与数据记录
对于检测的数据是通过串行通讯来进行输出,在测试可以由串口调试助手这样的工具来进行观察和审核,其内容如图7所示。
图7数据检测
在通过审核后,可直接将串口与数据记录模块连接到一起以记录检测的数据来生成文本文件,其显示见图8所示。
图8 数据记录
五、作品源码
作品源码:
六、视频演示
视频简介:
该视频演示了环境状态检测记录仪,从上电显示中文主界面并以语音方式提示作品功能,到以按键设置系统时间、切换功能显示界面及输出检测数据的过程。
视频链接:
七、项目总结
项目总结:
由于缺少较为详细的资料支持,开始时走了不少的弯路,单是创建一个可下载的开发环境就占去一半的开发时间,现在看来应使用最新版本的软件,并关闭杀毒软件的干扰。此外,以F7进行编译较为节省时间,尽量少用重新编译。在掌握了使用规律后,CDK这款开发工具还是比较好用的。
在作品的设计,加深了对开发板的了解,并对板载的资源进行了较为前面的利用,并扩展了对数字式传感器的驱动和使用。尽管作品的功能已相对完整,但还存在一定的改进空间,如添加无线通讯功能来实现与收集通讯等。有时间的话,还可以进一步的完善。
帖子分享链接汇总:
【平头哥RVB2601创意应用开发】+ 初识RVB2601开发板
http://bbs.eeworld.com.cn/thread-1195649-1-1.html
【平头哥RVB2601创意应用开发】+开发环境构建与下载测试
http://bbs.eeworld.com.cn/thread-1202462-1-1.html
【平头哥RVB2601创意应用开发】+GPIO的使用
http://bbs.eeworld.com.cn/thread-1202611-1-1.html
【平头哥RVB2601创意应用开发】+OLED屏的显示驱动
http://bbs.eeworld.com.cn/thread-1202648-1-1.html
【平头哥RVB2601创意应用开发】+RTC电子时钟
http://bbs.eeworld.com.cn/thread-1202654-1-1.html
【平头哥RVB2601创意应用开发】+LCD屏显示功能扩展
http://bbs.eeworld.com.cn/thread-1202798-1-1.html
【平头哥RVB2601创意应用开发】+光照强度检测
http://bbs.eeworld.com.cn/thread-1202826-1-1.html
八、其他
值得指出的是,板载的外设对系统的资源占用的更多,大大地限制了功能扩展的空间,在作品设计时只好将驱动GRB_LED的引脚用于驱动数字式传感器,所以检测的对象会受到限制。