查看: 1238|回复: 0
收起左侧

第一百零七章:CH32V103应用教程——PD0、1引脚的复用

[复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-23 17:16
  • 签到天数: 17 天

    [LV.4]

    发表于 2021-9-10 15:30:11 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 草帽王子 于 2021-9-10 15:29 编辑

    本章教程主要讲述如何进行PD0、1引脚的复用。正常情况下,PD0、1引脚是作为外部晶振引脚使用的,但是某些情况下,我们需要使用重映射功能,把其复用为普通引脚作为输入输出引脚使用。

    1、GPIO简介
    CH32V CH573单片机芯片-第一百零七章:CH32V103应用教程——PD0、1引脚的复用risc-v单片机中文社区(1)

    由数据手册引脚描述可知,外部晶振两个引脚可重映射为PD0、1引脚使用。

    2、硬件设计

    可使用杜邦线将PD0、1引脚与测试板LED灯连接,测试其输出功能,或与VCC或者GND连接测试其输入功能。

    3、软件设计


    本次实验具体程序如下,由于代码量较小,均放在main函数,main函数如下:


    Main.c文件
    1. /********************************** (C) COPYRIGHT *******************************

    2. * File Name          : main.c

    3. * Author             : WCH

    4. * Version            : V1.0.0

    5. * Date               : 2020/04/30

    6. * Description        : Main program body.

    7. *******************************************************************************/



    8. /*

    9. *@Note

    10. GPIO例程:

    11. PA0推挽输出。



    12. */



    13. #include "debug.h"



    14. #define in  1

    15. //#define out 0



    16. /*******************************************************************************

    17. * Function Name  : GPIO_Toggle_INIT

    18. * Description    : Initializes GPIOA.0

    19. * Input          : None

    20. * Return         : None

    21. *******************************************************************************/

    22. void GPIO_Toggle_INIT(void)

    23. {

    24.     GPIO_InitTypeDef  GPIO_InitStructure;



    25.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

    26.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

    27.     GPIO_PinRemapConfig(GPIO_Remap_PD01,ENABLE);



    28. #ifdef out

    29.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;

    30.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    31.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    32.     GPIO_Init(GPIOD, &GPIO_InitStructure);



    33.     GPIO_SetBits(GPIOD, GPIO_Pin_0);

    34.     GPIO_SetBits(GPIOD, GPIO_Pin_1);



    35. #elif  in

    36.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;

    37.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    38.     GPIO_Init(GPIOD, &GPIO_InitStructure);

    39. #endif

    40. }



    41. /*******************************************************************************

    42. * Function Name  : main

    43. * Description    : Main program.

    44. * Input          : None

    45. * Return         : None

    46. *******************************************************************************/

    47. int main(void)

    48. {

    49.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    50.     Delay_Init();

    51.         USART_Printf_Init(115200);

    52.         printf("SystemClk:%d\r\n",SystemCoreClock);

    53.         printf("GPIO Toggle TEST\r\n");

    54.         GPIO_Toggle_INIT();



    55.         while(1)

    56.     {

    57. #ifdef out

    58.         Delay_Ms(500);

    59.         GPIO_ResetBits(GPIOD, GPIO_Pin_0);

    60.         GPIO_ResetBits(GPIOD, GPIO_Pin_1);

    61.         printf("111111\r\n");

    62.         Delay_Ms(500);



    63.         GPIO_SetBits(GPIOD, GPIO_Pin_0);

    64.         GPIO_SetBits(GPIOD, GPIO_Pin_1);

    65.         printf("222222\r\n");

    66.         Delay_Ms(500);



    67. #elif  in

    68.         if((GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_0)==1)||(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)==1))

    69.         {

    70.              printf("up\r\n");

    71.              Delay_Ms(500);

    72.         }

    73.         else

    74.         {

    75.              printf("down\r\n");

    76.              Delay_Ms(500);

    77.         }



    78. #endif

    79.         }

    80. }
    复制代码

    Main.c文件主要包含两个函数:GPIO_Toggle_INIT函数和main函数,GPIO_Toggle_INIT函数主要进行PD0、1引脚的配置,注意作为重映射功能要使用GPIO_PinRemapConfig(GPIO_Remap_PD01,ENABLE)函数。main函数就是主函数,进行输入输出的运行。

    4、下载验证


    将编译好的程序下载到开发板并复位,当作为输出时,可看到测试板LED灯闪烁,同时串口打印如下:
    CH32V CH573单片机芯片-第一百零七章:CH32V103应用教程——PD0、1引脚的复用risc-v单片机中文社区(2)

    当作为输入使用时,当将PD0、1引脚接GND或者VCC时,串口打印如下:
    CH32V CH573单片机芯片-第一百零七章:CH32V103应用教程——PD0、1引脚的复用risc-v单片机中文社区(3)

    CH32V CH573单片机芯片-第一百零七章:CH32V103应用教程——PD0、1引脚的复用risc-v单片机中文社区(4) CH32V PD01复用.rar (460.76 KB, 下载次数: 11)







    上一篇:教你动手移植RT-Thread到国产MCU
    下一篇:第一百零八章:CH32V103应用教程——文件系统FatFs
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-20 12:02 , Processed in 0.400553 second(s), 48 queries .

    快速回复 返回顶部 返回列表