| 本帖最后由 kai迪皮 于 2023-9-12 11:39 编辑 
 #申请原创# @21小跑堂
 
 1 前言
 
 最近拿到了极海的APM32F411 TINY 板卡,APM32F411是其新推出的新品,资源如下:
 
 基于Arm® Cortex®-M4F内核,工作主频120MHz,具有高速运算能力、多种工作模式、以及丰富的高精度外设和通讯接口;内置CRC32运算单元,可为用户提供高集成度、高可靠性的SoC方案;作为APM32F4系列MCU的超值型拓展产品,能很好的满足用户对功耗、性能、性价比方面的产品均衡需求,可适用于电力,仪器仪表,工控,家电,物联网,新能源,智慧楼宇等广泛的应用领域。
 
 更多内容可以看他们的官网:[APM32F411 (geehy.com)](https://geehy.com/apm32?id=81)
 
 那话不多说,现在开始看看他们的板卡吧。
 
 2 APM32F411 TINY板
 
 
   
 板卡分为左右两个部分,右边是他们的板载仿真器,左边是他们的APM32F411芯片,外接的资源有1个Type-C(USB FS)、2个KEY、2个LED ,2个USART(与板载仿真器连接)。
 
 3 板载仿真器连接电脑
 
 使用Type-C线连接板载仿真器那边,可以看到设备管理器上多出了一个串口和“Geehy CMSIS-DAP WinUSB”设备。
 
 
   
 这表明他们使用的板载仿真器是基于WinUSB的CMSIS-DAP固件,同时支持串口数据发送(好评!)。
 
 4 板载串口及点灯Demo编写
 
 由于有板载仿真器我们这不点个灯和串口打印一下?(#^.^#)。
 
 我们去他们官网下载:https://geehy.com/uploads/tool/APM32F4xx_SDK_V1.4.zip
 
 由于我想评估一下他们的LED,和串口功能。我这里选择串口1,进行一下验证,步骤如下:
 
 1. 初始化串口1
 2. 编写串口1接收中断及判断接收到回车进行发送。
 
 为了方便,我直接在官方提供的“SysTick_TimeBase”上更改了(里面有LED的操作,不要多谢)。
 
 串口初始化:
 
 void USART1_Init(void)
{
    GPIO_Config_T GPIO_configStruct;
    USART_Config_T usartConfigStruct;
    
    GPIO_ConfigStructInit(&GPIO_configStruct);
    /* Enable GPIO clock */
    RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_USART1);
    /* Connect PXx to USARTx_Tx */
    GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_9, GPIO_AF_USART1);
    /* Connect PXx to USARTx_Rx */
    GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_10, GPIO_AF_USART1);
    /* Configure USART Tx as alternate function push-pull */
    GPIO_configStruct.mode = GPIO_MODE_AF;
    GPIO_configStruct.pin = GPIO_PIN_9;
    GPIO_configStruct.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &GPIO_configStruct);
    /* Configure USART Rx as input floating */
    GPIO_configStruct.mode = GPIO_MODE_AF;
    GPIO_configStruct.pin = GPIO_PIN_10;
    GPIO_Config(GPIOA, &GPIO_configStruct);
    /* USART configuration */
    usartConfigStruct.baudRate = 115200;
    usartConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
    usartConfigStruct.mode = USART_MODE_TX_RX;
    usartConfigStruct.parity = USART_PARITY_NONE;
    usartConfigStruct.stopBits = USART_STOP_BIT_1;
    usartConfigStruct.wordLength = USART_WORD_LEN_8B;
    USART_Config(USART1, &usartConfigStruct);
    USART_EnableInterrupt(USART1,USART_INT_RXBNE);
    
    NVIC_EnableIRQRequest(USART1_IRQn,1,0);
    /* Enable USART */
    USART_Enable(USART1);
}
串口中断服务函数:
 
 
 void USART1_Isr(void)
{
    /* USART1 Recieve Data */
    if(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == SET)
    {
        txrxDataBufUSART1[rxCountUSART1] = (uint8_t)USART_RxData(USART1);
        rxCountUSART1++;
        if((txrxDataBufUSART1[rxCountUSART1-1] == 0x0A)&&(txrxDataBufUSART1[rxCountUSART1-2] == 0x0D))
        {
            for(txCountUSART1 = 0;txCountUSART1 < rxCountUSART1;txCountUSART1++)
            {
                USART_TxData(USART1,txrxDataBufUSART1[txCountUSART1]);
                /* wait for the data to be send */
                while (USART_ReadStatusFlag(DEBUG_USART, USART_FLAG_TXBE) == RESET);
            }
            rxCountUSART1 = 0;
        }
    }
}
主函数:
 
 
 int main(void)
{
    USART1_Init();
    APM_LEDInit(LED2);
    APM_LEDInit(LED3);
    printf("APM32F411 TINY Demo\r\n");
    /* SysTick Initialization */
    SysTick_Init();
    while (1)
    {
        APM_LEDToggle(LED2);
        /* Precise Delay 1ms */
        SysTick_Delay_ms(1000);
        APM_LEDToggle(LED3);
    }
}
 5 Demo下载
 
 魔术棒选择仿真下载设置,选择:CMSIS-DAP Debugger
 
 
   
 进一步设置如下:
 
 
   
 然后编译程序后进行下载。
 
 6 结果
 
 程序下载至板卡后,板载的LED2/3交替闪烁,若此时已经打开串口助手会打印“APM32F411 TINY Demo”,使用串口助手发送数据(记得勾选“发送新行(Line by Line)”哦),会回复相同的数据。
 
 
   
 代码在这里:
  APM32F4xx_SDK_V1.4_APM32F411 TINY Demo.zip
(808.64 KB, 下载次数: 6) 
 欢迎一起交流~~~~
 
 
 |