打印
[RISC-V MCU 应用开发]

【RISC-V MCU CH32V103测评】+自制MP3播放器

[复制链接]
3082|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guangods|  楼主 | 2020-11-19 10:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guangods 于 2020-11-19 11:19 编辑

今天早上收到顺丰快递,打开一看,心仪已久的沁恒开发板到了。冬天绵绵细雨下,开启沁恒RISC单片机之旅。开箱,雨天,光线不太好,大家凑合着看看吧。

带了杜绑线,可以直接连接主板与调试器了。



主板,用的就是RISC的单片机,就是这次想了解的型号,另外,也可以作为了解国产单片机的尝试。

WCH-Link调试器,名称第一次见,类似于j-link吧。
头贴,先介绍这么多吧,关于评测,结合自己手头的模块,正好有个mp3模块+功放,这样可以做个简单的mp3控制播放器,但可能不限于mp3功能吧,主要看进度吧,还有结稿日期吧。

使用特权

评论回复

相关帖子

沙发
guangods|  楼主 | 2020-11-19 11:15 | 只看该作者
本帖最后由 guangods 于 2020-11-19 11:21 编辑

开发步骤:
1、先熟悉下开发环境,装好MounRiver Studio,连接好硬件环境(上面开箱给的一张小卡片上,有连接线图),如图:
2、将开发包里的点灯程序复制到开发目录下的user文件夹下,编译,下载,就可以了。
成功了,整个过程,没有任何卡顿。另外,点灯程序用的是PA0,所以需要一条杜绑线连接到LED1口。
点灯效果如下图:
总结:挺顺利的,资料很全面,只要顺着资料弄,就可以了。另外,打开串口助手,可以实现串口打印输出,不用再接任何串口线,用wch-link就可以实现串口通讯了。


使用特权

评论回复
板凳
Cyluo| | 2020-11-19 11:28 | 只看该作者
和题主差不多进度,实验楼下收到板子。早上对着图接了link和串口线。刚刚烧录完demo程序,在串口终端可以输出Hello world了。用的开发环境1.3版本里自带的Terminal串口终端,挺实用方便的

使用特权

评论回复
地板
guangods|  楼主 | 2020-11-21 15:35 | 只看该作者
guangods 发表于 2020-11-19 11:15
开发步骤:1、先熟悉下开发环境,装好MounRiver Studio,连接好硬件环境(上面开箱给的一张小卡片上,有连 ...

实验2实现触摸按键控制灯
上次实现了灯和串口打印,基本的框架其实就建立好了,在此框架基础上,加上触摸按键的程序就可以了,在main.c文件中改一下就行了。
#include "debug.h"

/* Global define */
#define TKEY_CR   ADC1->CTLR1
#define TKEY_CH   ADC1->RSQR3
#define TKEY_SR   ADC1->RDATAR

/* Global Variable */


/*******************************************************************************
* Function Name  : GPIO_Toggle_INIT
* Description    : Initializes GPIOA.0
* Input          : None
* Return         : None
*******************************************************************************/
void GPIO_Toggle_INIT(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void Touch_Key_Init(void)
{
    ADC_InitTypeDef ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC时钟分频为6分频
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;   //配置ADC为独立模式
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //设置在单通道模式下执行转换
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;  //设置在单次模式下执行转换
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //设置转换不是由外部触发启动
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //设置ADC数据右对齐
    ADC_InitStructure.ADC_NbrOfChannel = 1;                //顺序进行规则转换的ADC通道的数目
    ADC_Init(ADC1, &ADC_InitStructure);                    //根据ADC_InitStructure中指定的参数初始化ADC1寄存器

    ADC_Cmd(ADC1, ENABLE);
    TKEY_CH =0x00000002;     // TouchKey Channel
    TKEY_CR |= 0x51000000;   // Enable TouchKey
}

u16 Touch_Key_Adc(u8 ch)
{
  u16 val;

  while(!(TKEY_CR & 0x08000000));
  val = (u16)TKEY_SR;

    return val;
}
void sys_init(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  Delay_Init();
    USART_Printf_Init(115200);
    GPIO_Toggle_INIT();
    Touch_Key_Init();
}

/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Return         : None
*******************************************************************************/
int main(void)
{
        u8 i=0;
        u16 ADC_val;
        sys_init();
    printf("SystemClk:%d\r\n",SystemCoreClock);
    printf("key ctl led0\r\n");
        while(1)
  {
        ADC_val = Touch_Key_Adc(ADC_Channel_2);
//        printf( "TouchKey:%04d\r\n",  ADC_val );
        Delay_Ms(180);
        if(ADC_val & 0x8000)
        {
            printf("This value is discarded\r\n");
        }
        else if (ADC_val<2000)
        {
            Delay_Ms(20);
            if(ADC_val<2000)
            {
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i==0) ? (i=Bit_SET):(i=Bit_RESET));
            }
        }


        }
}

基本的效果如图:

使用特权

评论回复
5
guangods|  楼主 | 2020-11-22 15:56 | 只看该作者
guangods 发表于 2020-11-21 15:35
实验2实现触摸按键控制灯
上次实现了灯和串口打印,基本的框架其实就建立好了,在此框架基础上,加上触摸 ...

实验4,基本搭完祼奔程序的框架
周日,抽出一下午的时间来弄,基本上搭完了框架,和之前写的stm32的程序很相似。并且,弄了个gitee上远程库,这样,晚上在家也可以弄了。

暂时先不上代码了,现在看起来,还是有些乱。

使用特权

评论回复
6
jimmhu| | 2022-12-15 10:29 | 只看该作者
这个功能设计的非常棒呢。              

使用特权

评论回复
7
sanfuzi| | 2022-12-15 14:22 | 只看该作者
可以实现什么格式的文件解析?              

使用特权

评论回复
8
janewood| | 2022-12-15 15:02 | 只看该作者
I2S的接口有吗?              

使用特权

评论回复
9
uytyu| | 2022-12-15 16:23 | 只看该作者
这个是否需要其他模块的配置?              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

177

帖子

0

粉丝