本帖最后由 裴红恩 于 2024-2-10 20:22 编辑
感谢论坛以及国民技术车规MCU提供的N32A455开发板的试用机会。
STEP 1:板子开箱-N32A455开发板一块+usb转Mini 5p数据线一根
STEP 2:开发板基本情况介绍
Modu 1:Mini母座连接N32G452CCL7单片机,此单片机内部集成有usb通讯接口,作为一个烧写器连接N32A455。(程序烧录调试正常,烧录与调试时候将Boot0连接与GND)
Modu 2:N32G452CCL7串口与N32A455烧写口需要短接,以及MCU3.3V以及Modu 4模块中产生的3.3V需短接。
Modu 3:Modu 4模块中产生的3.3V电源以及GND。
Modu 4:MP2359-DJ模块将12V电源转化为5V,ASM1117将5V转化为3.3V以及一个5V到ASM1117的开关(电源模块电压正常)
Modu 5:直接可以通过外部的jlink以及其他的烧写器进行程序的烧录与调试。(外部jlink连接烧录正常)
Modu 6:五个按键,一个复位按键,一个按键按下连接3.3V,三个按键按下时连接一个电阻到GND。(按键可以正常使用)
(温馨提示:烧录程序时记得将Boot改变一下)
STEP 3: IO输入输出实现简单的按键控制三色LED变色(依据官方例程更改而来)
Modu 1:IO输入采用的是n32a455_gpio头文件中的GPIO_ReadInputDataBit引脚电平读取函数,在LedKeyInit函数中进行引脚的初始化具体如:
void LedKeyInit(void)
{
GPIO_InitType GPIO_InitStructure;//定义引脚初始化结构体
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOA));
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
GPIO_InitStructure.Pin = GPIO_PIN_0;//引脚名
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//工作模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
}
Modu 2:IO口的输出采用的是对寄存器PBC以及PBSC进行操作来改变引脚电平的输出,引脚电平变低通过LedOn,引脚输出变高通过LedOff,LED引脚初始化通过LedInit函数。
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] Turns selected Led on.
* @param GPIOx x can be A to G to select the GPIO port.
* @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
*/
void LedOn(GPIO_Module* GPIOx, uint16_t Pin)
{
GPIOx->PBC = Pin;
}
/**
* @brief Turns selected Led Off.
* @param GPIOx x can be A to G to select the GPIO port.
* @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
*/
void LedOff(GPIO_Module* GPIOx, uint16_t Pin)
{
GPIOx->PBSC = Pin;
}
/**
* @brief Configures LED GPIO.
* @param GPIOx x can be A to G to select the GPIO port.
* @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
*/
void LedInit(GPIO_Module* GPIOx, uint16_t Pin)
{
GPIO_InitType GPIO_InitStructure;
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
/* Enable the GPIO Clock */
if (GPIOx == GPIOA)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
}
else if (GPIOx == GPIOB)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
}
else if (GPIOx == GPIOC)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
}
else if (GPIOx == GPIOD)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);
}
else if (GPIOx == GPIOE)
{
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
}
else
{
}
/* Configure the GPIO pin */
if (Pin <= GPIO_PIN_ALL)
{
GPIO_InitStructure.Pin = Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOx, &GPIO_InitStructure);
}
}
STEP 3:main函数如下所示
int main(void)
{
LedInit(PORT_GROUP2, LED1_PIN | LED2_PIN);//初始化led引脚PA11 PA12
LedInit(PORT_GROUP1, LED6_PIN);//初始化led引脚PB10
LedKeyInit();//初始化按键输入引脚PA0
LedOn(PORT_GROUP2, LED1_PIN);//打开红色
LedOff(PORT_GROUP2, LED2_PIN);//关闭绿色
LedOff(PORT_GROUP1, LED6_PIN);//关闭蓝色
while (1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == 1 && keyFlag == 1)//获取引脚的电压至并且防止长时间按下变色以及防抖
{
Delay(0x28FFFF);
if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == 1 && keyFlag == 1)
{
keyFlag = 0;//一次按下不可重复二次进入
++ledFlag;//色彩变化
if(ledFlag >= 3)
{
ledFlag = 0;
}else{}
switch(ledFlag)
{
case 0:
{
LedOff(PORT_GROUP2, LED2_PIN);
LedOff(PORT_GROUP1, LED6_PIN);
LedOn(PORT_GROUP2, LED1_PIN);
break;
}
case 1:
{
LedOff(PORT_GROUP2, LED1_PIN);
LedOff(PORT_GROUP1, LED6_PIN);
LedOn(PORT_GROUP2, LED2_PIN);
break;
}
case 2:
{
LedOff(PORT_GROUP2, LED1_PIN|LED2_PIN);
LedOn(PORT_GROUP1, LED6_PIN);
break;
}
default:break;
}
}
}else if(GPIO_ReadInputDataBit(GPIOA, GPIO_PIN_0) == 0 && keyFlag == 0){
keyFlag = 1;
}else{}
}
}