打印
[技术文档]

航顺HK32F030M复用SWD为通用GPIO

[复制链接]
3510|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wiba|  楼主 | 2021-6-7 10:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
关于航顺HK32F030M
HK32F030M简介
HK32F030M 系列使用 ARM® CortexTM-M0 内核
最高工作频率 32MHz, 内置 16K-ByteFLASH、 448-Byte EEPROM 和 2-KByte SRAM。


并且号称引脚兼容STM8S003F3P6,对比图如下:

而且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有什么不同

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的寄存器进行功能切换。


使用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 功能。



使用特权

评论回复
5
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敏感的应用应该很友好,同样也提供保姆级例程。


使用特权

评论回复
6
huahuagg| | 2021-6-8 09:43 | 只看该作者
这种需要特殊配置吧

使用特权

评论回复
7
laodao315| | 2022-8-1 12:53 | 只看该作者
正用到这个功能,试了好久没成功,看到此贴才设置才成功,感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

3313

帖子

3

粉丝