一、了解CH582M资源?
可以看出他的Flash和SRAM还是可以的,外设也很多,并且支持蓝牙,而且正点原子的手持电烙铁就是用的CH5x系列的MCU做的主控,博主我也做过手持电烙铁,只是我用的是stm32F103C8t6做的。程序是用标准库写的,好了废话不多说现在开始介绍CH582M的GPIO。
二、认识GPIO及配置
1.认识GPIO
这个不懂可以去看看STC32G的专栏。GPIO就是通用输入输出,可以通过配置不同的模式来达到不同的功能。
不同模式看下面代码注解
/*********************************************************************
* @fn GPIOB_ModeCfg
*
* @brief GPIOB端口引脚模式配置
*
* @param pin - PB0-PB23
* @param mode - 输入输出类型
*
* @return none
*/
void GPIOB_ModeCfg(uint32_t pin, GPIOModeTypeDef mode)
{
switch(mode)
{
case GPIO_ModeIN_Floating: //浮空输入模式
R32_PB_PD_DRV &= ~pin;
R32_PB_PU &= ~pin;
R32_PB_DIR &= ~pin;
break;
case GPIO_ModeIN_PU: //上拉输入模式
R32_PB_PD_DRV &= ~pin;
R32_PB_PU |= pin;
R32_PB_DIR &= ~pin;
break;
case GPIO_ModeIN_PD: //下拉输入模式
R32_PB_PD_DRV |= pin;
R32_PB_PU &= ~pin;
R32_PB_DIR &= ~pin;
break;
case GPIO_ModeOut_PP_5mA: //5ma推挽输出模式
R32_PB_PD_DRV &= ~pin;
R32_PB_DIR |= pin;
break;
case GPIO_ModeOut_PP_20mA://20ma强推挽输出模式
R32_PB_PD_DRV |= pin;
R32_PB_DIR |= pin;
break;
default:
break;
}
}
2.GPIO配置(输出模式,点灯大师)
这里我会教大家如何点亮板载的PB4的LED灯。
首先我们要打开一个工程文件
然后我们是使用的是PB4控制的LED灯,
这里配置就比较简单了,玩过stm32的都知道配置LED灯我们是需要用到推挽输出模式的,这里也一样我们选择20mA强推挽输出模式。
#include "CH58x_common.h"
//#include "bmp.h"
//#include "oled.h"
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
//u8 Image_BW[4736];
void main()
{
//这里是配置的是MCU的时钟,这里配置为60MHZ,
SetSysClock(CLK_SOURCE_PLL_60MHz);
//配置GPIOB的Pin_4引脚为20mA强推挽输出模式
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_20mA);
while(1)
{
GPIOB_SetBits(GPIO_Pin_4); //设置PB4为高电平
DelayMs(1000); //ms延时
GPIOB_ResetBits(GPIO_Pin_4); //设置PB4为低电平
DelayMs(1000); //ms延时
}
}
ok这里写完了就点编译
编译成功过后,我们要打开沁恒的烧录软件WCHISPTool_CH57x-58x
这里我们是使用的是USB的下载方式
然后我们需要先断电然后按住板上的BOOT按钮,然后在上电,这样我们就有设备列表
然后点击目标程序文件1的文件夹图形然后选择我们编译好的文件的hex文件,然后点击下载,ok,你的第一个成就点灯大师完成。
2.GPIO配置(输入模式,点灯大师)
#include "CH58x_common.h"
#include "bmp.h"
#include "oled.h"
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
u8 Image_BW[4736];
void main()
{
SetSysClock(CLK_SOURCE_PLL_60MHz);
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_20mA);
GPIOB_ModeCfg(GPIO_Pin_3,GPIO_ModeIN_PU); //上拉输入模式
while(1)
{
if(GPIOB_ReadPortPin(GPIO_Pin_3) == 1){
GPIOB_SetBits(GPIO_Pin_4);
}else{
GPIOB_ResetBits(GPIO_Pin_4);
}
// GPIOB_SetBits(GPIO_Pin_4);
// DelayMs(1000);
// GPIOB_ResetBits(GPIO_Pin_4);
// DelayMs(1000);
}
}
总结
这就是GPIO的一些配置了,很简单,对了,CH582M的ADC是使用的是浮空输入,并且CH582M好像没有模拟输入模式