CH32系列某些小封裝晶片可能會存在合封引腳,如下圖。以下圖8腳為例,為PD4、PD5、PD1的合封引腳,其中PD1引腳還作為SWIO下載引腳。若要使用PD4引腳作為普通IO輸出高低電平,注意在進行程式配置時需要注意:
(1)PD4引腳按照GPIO輸出配置;
(2)合封引腳PD5和PD1要配置為浮空輸入模式;
(3)PD1同時作為SWIO下載引腳,要注意關閉SDI下載功能,要注意開啟複用時鐘,即AFIO時鐘。
PD4引腳作為普通IO使用配置程式碼如下:
/********************************** (C) COPYRIGHT ******************************* * File Name : main.c * Author : WCH * Version : V1.0.0 * Date : 2023/12/25 * Description : Main program body. ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ /* *@Note *Multiprocessor communication mode routine: *Master:USART1_Tx(PD5)\USART1_Rx(PD6). *This routine demonstrates that USART1 receives the data sent by CH341 and inverts *it and sends it (baud rate 115200). * *Hardware connection:PD5 -- Rx * PD6 -- Tx * */ #include "debug.h" /* Global define */ /* Global Variable */ /********************************************************************* * @fn USARTx_CFG * * @brief Initializes the USART2 & USART3 peripheral. * * @return none */ void GPIO_CFG(void) { GPIO_InitTypeDef GPIO_InitStructure = {0}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SDI_Disable, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); } /********************************************************************* * @fn main * * @brief Main program. * * @return none */ int main(void) { u8 i=0,j=0; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); SystemCoreClockUpdate(); Delay_Init(); #if (SDI_PRINT == SDI_PR_OPEN) SDI_Printf_Enable(); #else // USART_Printf_Init(115200); #endif // printf("SystemClk:%d\r\n",SystemCoreClock); // printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() ); GPIO_CFG(); while(1) { Delay_Ms(50); //延時50ms GPIO_WriteBit(GPIOA, GPIO_Pin_2, (i==0) ? (i=Bit_SET):(i=Bit_RESET)); //設定PA2引腳狀態為低電平 Delay_Ms(50); //延時50ms GPIO_WriteBit(GPIOD, GPIO_Pin_4, (j==0) ? (j=Bit_SET):(j=Bit_RESET)); //設定PD4引腳狀態為低電平 } }
當使用晶振引腳作為普通GPIO使用時,注意系統主頻要切換使用內部晶振進行配置。