极海推出了一款电机评估板G32M3101,其采用了电机控制专用SoC,是将“MCU+LDO+栅极驱动器”三体合一。
它具有如下特点:
l 强劲算力: 基于Arm® Cortex®-M0+ 内核,最高工作主频64MHz,64KB Flash / 8KB SRAM。内置DIV/MULT 硬件算法加速单元,高效实现有感/无感 FOC 算法控制
l 极致集成: 内置40V 3P+3N 栅极驱动器,设有240ns死区时间及欠压、防直通等保护。内置5V/60mA 高精度LDO(±0.5%),直接为内部MCU供电,无需外部电源模块
l 丰富的高精度模拟外设: 集成 12位高精度ADC(最高2MSPS,支持分段采样与DMA)、2个轨到轨运放(OP-AMP)、2个可编程模拟比较器(COMP)及 ±5℃ 高精度温度传感器。
该评估板的外观见图1所示,采用的是单面器件布局,由于三合一单芯片架构,故在尺寸上较之其它厂家的产品要小。

图1 评估板外观
正因为尺寸的小巧,也使得它更近乎于完整的产品,可供用户测试的引脚相当要少。
为次,在设计上出现了图2所示的设计结构,它将调试接口与串口通讯结合到了一起。
按说这种设计也无可厚非,但易跌落的陷阱是,当为了进行调试将所用引脚改做串口使用时,后面的灾难就会接踵而至,会在再此下载调试发现评估板已经变砖了,无法进行程序的下载。

图2 共用结构
那改既能保持程序调试下载,又能进行串口通讯呢?
方法自然就是进行功能分离,从而各用各的引脚,避免引脚共用所出现的麻烦。
问题来了,由于评估板的功能相对专一,引脚已被瓜分。
所幸的是评估板上,采用了一种组合式设计,可进行相应的工作模式切换,详见图3所示。

图3 霍尔传感器接口
恰恰这个接口所用的引脚PA7和PA8是可以设置为串口功能,这样问题就出现了解决的途径,即使用PA7和PA8作为串口。
为此对串口配置函数为:
void DDL_UART0_Config(void)
{
DDL_GPIO_InitTypeDef GPIO_InitStruct = {0U};
DDL_SCU_Unlock();
DDL_SCU_EnableAHBPeripheralClock(DDL_SCU_AHB_PERIPHERAL_GPIOA);
DDL_SCU_EnableAPBPeripheralClock(DDL_SCU_APB_PERIPHERAL_UART0);
DDL_SCU_Lock();
/* Configure the UART TX pin */
GPIO_InitStruct.Pin = DDL_GPIO_PIN_7;
GPIO_InitStruct.Mode = DDL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Drive = DDL_GPIO_DRIVE_LOW;
GPIO_InitStruct.Pull = DDL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = DDL_GPIO_AF_0;
DDL_GPIO_LockKey(GPIOA, DDL_GPIO_LOCK_DISABLE);
DDL_GPIO_Init(GPIOA, &GPIO_InitStruct);
DDL_GPIO_LockKey(GPIOA, DDL_GPIO_LOCK_ENABLE);
/* Configure the UART RX pin */
GPIO_InitStruct.Pin = DDL_GPIO_PIN_8;
GPIO_InitStruct.Mode = DDL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Drive = DDL_GPIO_DRIVE_LOW;
GPIO_InitStruct.Pull = DDL_GPIO_PULL_NO;
GPIO_InitStruct.InputEnable = DDL_GPIO_INPUT_ENABLE;
GPIO_InitStruct.Alternate = DDL_GPIO_AF_0;
DDL_GPIO_LockKey(GPIOA, DDL_GPIO_LOCK_DISABLE);
DDL_GPIO_Init(GPIOA, &GPIO_InitStruct);
DDL_GPIO_LockKey(GPIOA, DDL_GPIO_LOCK_ENABLE);
UART0_InitStruct.BaudRate = 115200U;
UART0_InitStruct.DataWidth = DDL_USART_DATAWIDTH_8B;
UART0_InitStruct.StopBits = DDL_USART_STOPBITS_1;
UART0_InitStruct.Parity = DDL_USART_PARITY_NONE;
UART0_InitStruct.TransferDirection = DDL_USART_DIRECTION_TX_RX;
DDL_USART_Init(UART0, &UART0_InitStruct);
DDL_USART_Enable(UART0);
}实现串口功能测试的主程序为:
int main(void)
{
DDL_DeviceConfig();
printf("\r\n UART Printf Example: retarget the C library printf function to the UART\r\n");
while (1)
{
if(BOARD_BUTTON_GetState(BUTTON_KEY1)==GPIO_PIN_RESET)
{
BOARD_LED_On(LED2);
}
else
{
BOARD_LED_Off(LED2);
}
DDL_mDelay(200U);
printf(" ** Test finished successfully. ** \r\n");
}
}经程序的编译和下载,其测试结果见图4所示。
这样就避开了因图CH340E电路之便而跌入变砖的陷阱,从而找到了获得串口通讯的引脚资源。
有了串口通讯功能,再进行调试就敞开了方便之门。

图4 测试效果
我要赚赏金
