前言
最近想要做一个项目是涉及用国产MCU--CW32配合K210控制舵机实现跟踪物体的目的,我想要实现一个功能就是识别到目标并且把目标的坐标信息通过串口传输给单片机,单片机控制舵机进行控制,那么视觉方面目前我认为最好的选择就是使用k210了,它不仅成本低,性能好,而且基于MicroPython的开发极易上手,单片机选用的是武汉芯源半导体公司的国产芯片CW32.
什么是CW32
CW32是武汉芯源半导体推出的基于Cortex-M0+内核的32位微控制器:CW32系列MCU,该系列MCU在多项指标上大幅领先于其他品牌同类产品,可以满足通用、低成本、超低功耗以及高性能等不同应用市场的MCU需求。
什么是k210:
K210 是嘉楠(Cannaan)科技的一款集成机器视觉与机器听觉能力的系统级芯片 (RSIC-V CPU)。使用台积电 (TSMC) 超低功耗的 28 纳米先进制程,具有双核 64 位处理器,拥有较好的功耗性能,稳定性与可靠性。该方案力求零门槛开发,可在最短时效部署于用户的产品中,赋予产品人工智能(AI)。 可以说是集性能强劲与高性价比于一身。
一、CW32根据K210串口传回来的数据输出PWM控制舵机进行跟踪
CW32F030x6/x8 是基于 eFlash 的单芯片微控制器,集成了主频高达 64MHz 的 ARM® Cortex®-M0+ 内核、高速嵌入式存储器(多至 64K 字节 FLASH 和多至 8K 字节 SRAM)以及一系列全面的增强型外设和 I/O 口。
所有型号都提供全套的通信接口(三路 UART、两路 SPI 和两路 I2C)、12 位高速 ADC、七组通用和基本定时器以及一组高级控制 PWM 定时器。
CW32F030x6/x8 可以在 -40° C 到 105° C 的温度范围内工作,供电电压宽达 1.65V ~ 5.5V。支持 Sleep 和DeepSleep 两种低功耗工作模式。
通用异步收发器 (UART) 支持异步全双工、同步半双工和单线半双工模式,支持硬件数据流控和多机通信;可编程数据帧结构;可以通过小数波特率发生器提供宽范围的波特率选择。
UART 控制器工作在双时钟域下,允许在深度休眠模式下进行数据的接收,接收完成中断可以唤醒 MCU 回到运行模式
本例程中选用的串口1
详细代码如下
1.配置系统时钟
void RCC_Configuration(void)
{
// 1. HSE 使能&校准,外部晶振频率=8MHz
RCC_HSE_Enable(RCC_HSE_MODE_OSC,8000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE);
// 2. 设置 HCLK&PCLK的 分频系数
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
// 3. 使能 PLL,6倍频至 48MHz
RCC_PLL_Enable(RCC_PLLSOURCE_HSEOSC, 8000000, 6);
RCC_PLL_OUT();
// 4. 设置 Flash读等待周期:48M≥时钟源HCLK>24M,为 2cycle;时钟源HCLK>48M,为 3cycle
__RCC_FLASH_CLK_ENABLE();
FLASH_SetLatency(FLASH_Latency_2);
// 5. 切换时钟至 PLL
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
RCC_SystemCoreClockUpdate(48000000); //48000000
}
2.初始化IO口
void GPIO_Configuration(void)
{
// 使能 GPIOB时钟:因为使用了 PB06(M4电机)& PB07(M3电机)引脚
__RCC_GPIOB_CLK_ENABLE();
// 使能 GPIOA时钟:因为使用了 PA08(M1电机)& PA11(M2电机)引脚
__RCC_GPIOA_CLK_ENABLE();
// 配置 计时器:GTIM3_CH4(PA12引脚)
PA12_AFx_GTIM3CH4();
PA12_DIGTAL_ENABLE(); // 使能 数字方式
PA12_DIR_OUTPUT(); // 输出
PA12_PUSHPULL_ENABLE(); // 模式:推挽输出