搜索

[技术文档] 航顺HK32F030M复用SWD为通用GPIO

[复制链接]
920|5
手机看帖
扫描二维码
随时随地手机跟帖
wiba|  楼主 | 2021-6-7 10:55 | 显示全部楼层 |阅读模式
关于航顺HK32F030M
HK32F030M简介
HK32F030M 系列使用 ARM® CortexTM-M0 内核
最高工作频率 32MHz, 内置 16K-ByteFLASH、 448-Byte EEPROM 和 2-KByte SRAM。


并且号称引脚兼容STM8S003F3P6,对比图如下:
3719860bd8aa981aad.png
而且HK32F030M还提供了一个跟STM8S类似的BEEP功能,也在PD4引脚。
但是,想要无缝转换到现有的板子上是有条件的,根据数据手册提供的信息来看,有几点区别:

HK32F030M供电范围1.8V~3.6V,STM8S供电范围2.9V-5.5V,如果板载MCU供电是5V的话,就无法直接替换了
HK32F030M使用SWD烧录程序,SWD需要SWDIO-SWCLK-NRST三个信号,而SWIM是串行单线调试,仅需一根SWIM信号线,无法使用原先板载的SWIM接口烧录程序。
总结来看,想要无缝切换,需要先在Demo板上调试好HK32F030M的软件,使用Scoket烧录好程序,再贴装。


使用特权

评论回复
wiba|  楼主 | 2021-6-7 10:56 | 显示全部楼层
HM32F030M和HM32F031M有什么不同
1100160bd8acd9a007.png
0301M可以堪称030M的升级版,主要体现在:

型号              030M                  0301M
主频                   32M                    48M
ROM/RAM           16/2                   16/2
GPIO                     16                    18
0301M的主频更高,达到48M,对于一些电机控制应用而言,可以达到更高的精度
0301M有18个可用的GPIO,把030M上NRST和VCAP这两个引脚都用起来了
同时,航顺为这两个系列的MCU提供了,两套库。


使用特权

评论回复
wiba|  楼主 | 2021-6-7 10:57 | 显示全部楼层
HK32F030M复用SWD为通用GPIOAF外设功能映射

对于引脚功能复用HK32的设置方法和STM32类似,使用一个类似AF的寄存器进行功能切换。
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dnMTE5NDAyNDA5Mw==,size_16,color_FFFFFF,t_70.jpg
使用AF功能寄存器,完成了不同外设功能在当前引脚的映射。


使用特权

评论回复
wiba|  楼主 | 2021-6-7 10:58 | 显示全部楼层
IOMUX引脚功能多重映射
HK32F030M还提供了一个叫引脚功能多重映射IOMUX的外设,对于 TSSOP16/SO8N 产品 HK32F030M 通过 IOMUX 引脚功能多重映射控制器,实现了单根引脚对应多个 GPIO 或外设 IO 的映射控制。
例如下图中第 8 脚,芯片初始复位后其功能为“PD5(及 SYSCFG 配置中对应的外设 IO)”;通过配置 IOMUX 寄存器可以将第 8 脚功能重映射到 PD3(及 SYSCFG 配置中对应的外设 IO)、 PD1(及 SYSCFG 配置中对应的外设 IO)或 PC6(及 SYSCFG 配置中对应的外设 IO)。
通过 IOMUX 配置, SO8N/SOP8 封装产品仍然可以灵活使用 18 个 GPIO 以及片内所有外设 IO 功能。

6949860bd8b23d5d78.png

使用特权

评论回复
wiba|  楼主 | 2021-6-7 10:59 | 显示全部楼层
SWD映射为普通GPIO
MCU上电复位后PD5和PB5分别作为SWDIO和SWCLK用于调试功能,当我们想把这两个IO作为普通GPIO来使用时,通过配置AF寄存器是无法实现的,必须使用IOMUX来实现GPIO和SWD(SWDIO和SWCLK)之间的切换。
可以通过以下代码片实现这一操作:

static void IOMUXGpioInit(void)
{
        GPIO_InitTypeDef m_gpio;
        //使能IOMUX时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_IOMUX,ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
        //PD5 as GPIO
        m_gpio.GPIO_Mode = GPIO_Mode_OUT;
        m_gpio.GPIO_OType = GPIO_OType_PP;
        m_gpio.GPIO_Pin = GPIO_Pin_5;
        m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
        m_gpio.GPIO_Speed = GPIO_Speed_Level_3;
        GPIO_IOMUX_ChangePin(IOMUX_PIN2,IOMUX_PD5_SEL_PD5);// TSSOP20 PIN2(PD5) PD5 IO
        GPIO_Init(GPIOD, &m_gpio);
        //PB5 as GPIO
        m_gpio.GPIO_Pin = GPIO_Pin_5;
        GPIO_IOMUX_ChangePin(IOMUX_PIN11,IOMUX_PB5_SEL_PB5);//TSSOP20PIN11(PD5)PB5 IO
        GPIO_Init(GPIOB, &m_gpio);
}



总结一下,关于很多人说国产的MCU坑很多这个问题,我觉得大部分答案都可以在数据手册和用户手册上找到相应的答案。他敢拿出来卖,说明基本功能都是经过严格验证过的,无非就是使用体验的问题,而使用体验是跟资料的丰富程度挂钩的,这一点正是国产厂家所欠缺的,资料非常不完善。基本上,有任何问题只有数据手册和用户手册可以看,至于应用手册啊啥的。。。。。
所以,官方的例程库就显得十分重要了,基本能解决初次使用所碰到的90%的问题,比如SWD映射为GPIO的问题,数据和用户手册完全没有提到,但是在例程库里有详细的代码说明整个配置过程。
只要资料完善,我觉得使用体验还是很不错的。毕竟内核是从ARM买的,厂家也就做了一些外设的定制,改来改去,无非就是寄存器换了个名字,弄个IOMUX这种看似很奇怪的东西,其实这种东西STM32也有,只不过我们习惯了STM32的用法和资料罢了。

另外,华大半导体的HC32F003/005系列也很有看点,关键是他家的库函数写的很精简,类似于直接操作寄存器,对FLASH敏感的应用应该很友好,同样也提供保姆级例程。


使用特权

评论回复
huahuagg| | 2021-6-8 09:43 | 显示全部楼层
这种需要特殊配置吧

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 火星国务卿 得到打赏 ¥383.00
  • 2 呐咯密密 得到打赏 ¥365.00
  • 3 kk的回忆 得到打赏 ¥360.01
  • 4 Gavin3389 得到打赏 ¥301.00
  • 5 jinglixixi 得到打赏 ¥220.00
  • 6 小叶三千 得到打赏 ¥200.00
  • 7 神圣雅诗人 得到打赏 ¥200.00
  • 8 qjp1988113 得到打赏 ¥106.00
  • 9 linghz 得到打赏 ¥100.00
  • 10 xyz549040622 得到打赏 ¥100.00
在线客服 快速回复 返回顶部 返回列表