本帖最后由 peterLaw 于 2024-6-12 14:41 编辑
#申请原创# @21ic小跑堂
众所周知,对于大多数的MCU我们使用的功能只不过的其50%左右,其实最基础的还是IO的操作,有了IO的基础才可以逐步进行深入的开发。
下面咱们就以CW32F003ExPx StartKit开发板讲解入门IO操作。
首先对于任何一款开发板一定要了解的就是其原理,只有了解了原理才能知道各个引脚的状态,
下面咱们先把CW32F003ExPx StartKit开发板的原理图给大家分享一下:
通过原理图咱们可以知道按键S1与S2即(PB5与PB6引脚)默认连接的高电平,下面咱们就先把2个按键写入程序进行控制。
对于单片机而言尤其是库函数,一定要进行初始化配置,只有配置了各个引脚的功能才能使用引脚将功能实例化。下面为GPIOB引脚初始化代码:
GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO结构体
CW_SYSCTRL->AHBEN_f.GPIOB = 1; //Open GPIOB Clk,打开GPIOB口的时钟总线,就说明是GPIOB口操作
//set PB05 / PB06 as inupt with pur / int = none
GPIO_InitStruct.Pins = GPIO_PIN_5 | GPIO_PIN_6;//配置GPIOB的引脚5和6
GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;//配置为输入上拉
GPIO_InitStruct.IT = GPIO_IT_NONE;//不涉及中断
GPIO_Init( CW_GPIOB , &GPIO_InitStruct);//初始化GPIOB
有了按键咱们用按键控制2个LED灯,选用PB00与PB01两个IO口连接LED灯。
过程跟上面一样初始化IO,配置为输出模式。
//GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO结构体,前面已经定义可以省去不用重复
//CW_SYSCTRL->AHBEN_f.GPIOB = 1; //Open GPIOB Clk,打开GPIOB口的时钟总线,前面已经打开可以不用重复打开
//set PB00 / PB01 as output
GPIO_InitStruct.Pins = GPIO_PIN_0 | GPIO_PIN_1 ;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init( CW_GPIOB , &GPIO_InitStruct);
最后咱们编写逻辑,当PB5按下时,PB5口为低电平0(根据原理图可以看出按下接地为0,正常为1),PB5控PB00的LED灯,PB6控PB01的LED灯
while(1)
{
//-----------------------------------------------------------------------
//以下调用函数法读写PIN
if( GPIO_ReadPin(CW_GPIOB , GPIO_PIN_5 ) )
{
GPIO_WritePin( CW_GPIOB , GPIO_PIN_0 , GPIO_Pin_SET );
}
else
{
GPIO_WritePin( CW_GPIOB , GPIO_PIN_0 , GPIO_Pin_RESET );
}
//-----------------------------------------------------------------------
//以下采用宏读写PIN
if( PB06_GETVALUE() )
{
PB01_SETHIGH();
// PB03_TOG();
}
else
{
PB01_SETLOW();
}
}
最终显示的效果如下:
通过本文对芯源开发板的IO控制讲解是不是非常简单,赶快跟我们一起玩转芯源MCU!
|