原创 【CH32V307评估板】+串口DMA接受与发送

2022-7-10 20:21 3018 3 3 分类: MCU/ 嵌入式
1. 感谢面包板社区与南京沁恒公司给我提供了这次测评机会,支持国产芯片,相信总有一天可以安得芯片千万间,大庇天下硬件俱欢颜。
2. 别人因参加嵌入式芯片与系统设计竞赛接触到了沁恒的赤菟开发板,不得不说颜值是非常能打,颇有艺术品的气息,不过缺点就是IO口太少了,只可以在小范围进行开发,而这次测评的互联型RISC-V 32位单片机CH32V307,在保留其颜值的基础上扩展了IO口,使使用者的使用体验再次上升一个台阶。
  赤菟开发板
         RISC-V 32位单片机CH32V307
串口及DMA使用
RISC-V 32位单片机CH32V307搭载了个 USART 接口(包含5UART ),
基本步骤是
1. 创建一个基于CH32V307开发板的RT-Thread新项目
2. 在左侧项目资源管理器中点击“RT-Thread Setting”
3.按照图示进行配置
4.board.h中添加宏定义
5.在drv——usart.c中添加USART2的配置代码
6. 添加头文件
main.c中添加头文件关联
serial_v2.h文件中添加头文件关联
之后右键工程点击属性,按照图示添加之前添加的头文件包含。
                                      
7. 到此为止我们对串口及dma的前置工作就已经做完了,终于可以写代码了。
下面我展示了我的主函数的串口2使用函数,包括了回调函数(发送接受到的数据)
rt_device_t u2_dev;
rt_thread_t u2_thread;
struct serial_configure u2_configs=RT_SERIAL_CONFIG_DEFAULT;

struct rt_semaphore sem1_andy;
rt_size_t rx_leng;



rt_err_t rx_callback(rt_device_t dev, rt_size_t size)
{

    rx_leng=size;
    rt_sem_release(&sem1_andy);
    return RT_EOK;
}

void serial_thread_entry(void *parameter)
{
char buffer[512];
rt_size_t  len=0;
    while(1)
    {
        rt_sem_take(&sem1_andy, RT_WAITING_FOREVER);
        len= rt_device_read(u2_dev, 0, &buffer, rx_leng);
        buffer[len]='\n';
         rt_kprintf("buffer=%c\n",buffer);

    }

}

int main(void)
{
    rt_err_t ret=0;
    u2_dev=rt_device_find("uart2");
    if(u2_dev==RT_NULL)
    {   LOG_E("rt_device_find[uart2] failed...\n");
        return -EINVAL;
    }
    ret = rt_device_open(u2_dev, RT_DEVICE_OFLAG_RDWR|RT_DEVICE_FLAG_DMA_RX);
    if(ret<0){
    LOG_E("OPEN USART2 FAILED...\n");
    return ret;
    }
    rt_device_control(u2_dev, RT_DEVICE_CTRL_CONFIG, (void *)&u2_configs);
    rt_device_set_rx_indicate(u2_dev, rx_callback);
     rt_sem_init(&sem1_andy, "andy_sem_rx", 0, RT_IPC_FLAG_FIFO);
     u2_thread= rt_thread_create("u2_rx",  serial_thread_entry , RT_NULL, 1024, 10, 5);
     if(u2_thread==RT_NULL)
     {
         LOG_E("rt_thread_create failed...\n");
               return -EINVAL;
     }
     rt_thread_startup(u2_thread);
    rt_device_write(u2_dev, 0, "UART2 send test\n", rt_strlen("UART2 send test\n"));

    return RT_EOK;
}

8. 再将2usbttl接到PA9,PA10(串口1tx及其rx),PA2PA3(串口2TX及其RX),再连接各自的VCC及其GND
9. 烧录
10. 现象

作者: andy0520, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3999312.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /2 下一条