�A���Ƭ�C�_�l(f��)֮HC32F460��QSTM32F411��ֲӛ�
- 2020�� 10 �� 21 �������(q��)�ӎ���µ������°� 1.1.1
- 2020�� 10 �� 20 �գ�MCU ��ԭ���� HC32F460KCTA ���Q�� HC32F460KETA
����
Ŀǰ�����֮a(ch��n)Ʒ��Ҫ���a(ch��n)������(d��ng)��_�ľ��Ǹ��Q���a(ch��n) MCU���ڽ�(j��ng)�^���о�֮������K�Q��ʹ���A��� MCU �����棨STM32F411 -> HC32F460�������������c������Ό��F(xi��n)���Ŀ���aһ�c�c��ֲ�� HC32F460 �ϡ����¾���һЩ����ֲ�^���е�ӛ���
���ȏĹپW(w��ng) https://www.hdsc.com.cn/ ���d���N�Y�����_�l(f��)��
�_�l(f��)�h(hu��n)��
��(d��ng)ǰ�����_�l(f��)�h(hu��n)���У�Ĭ�J(r��n)���]���A��� MCU���������Ҫ�҂��Լ����A��ĹپW(w��ng)���d�� IDE �������߰��M�а��b�����w�����ׂ����棺
MCU �x��
Ĭ�J(r��n) Keil �� IAR �в��]���A��� MCU����횏���پW(w��ng)���d�_�l(f��)���߰���Ȼ���M�а��b�����Hʹ���аl(f��)�F(xi��n)�����b֮����mȻ�����x���A�� MCU�����������澹Ȼ�]���Ҍ���(y��ng)�� MCU �����
ò����Ŀǰ���_�l(f��)���ЃH�ṩ�ˎׂ���͵� MCU���������d�㷨�����]����ʹ�õ� MCU �������^�����҂������x��һ���YԴ��һЩ�� MCU ���d�㷨������
���d�㷨
���b�����ڵ��_�l(f��)����1.0.2����ò�Ʋ��]�Ќ���(y��ng)�� FLASH ���d�㷨������ Keil ���治���@ʾ���d�㷨����Q�����ǣ����A���ṩ�����d�㷨 Flash_HC32F46x.FLM
��λ�����_�l(f��)���Ќ���(y��ng)���_�l(f��)�h(hu��n)��Ŀ��£��ŵ� Keil �İ��bĿ��µ� D:\Keil_v5\ARM\Flash
�������^�������ҏĹپW(w��ng)���d������ 1.0.5 �汾�����b��Keil �Ϳ����@ʾ FLASH ���d�㷨����
ע�⣺����������(y��ng)���(q��)�ӎ�����Ҫ֔(j��n)�����ҿ���һ�����µ��(q��)�ӎ��c�f�IJ������ݣ�
Jlink/J-Flash ������
����_�l(f��)��ʹ�� Jlink �M�з����{(di��o)ԇ����ô��(j��ng)�����õ� J-Flash ���x�� MCU��Ĭ�J(r��n)��r�� Jlink ��Ҳ�Ǜ]���A�� MCU ������Q���������քӾ� Jlink �İ��bĿ��µ������ļ� JLinkDevices.xml
����������(n��i)�ݣ�
<!-- --><!-- HDSC (HC32) --><!-- --><Device><ChipInfoVendor="HDSC"Name="HC32L176"WorkRAMAddr="0x20000000"WorkRAMSize="0x2000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/FlashHC32L17X_128K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L136"WorkRAMAddr="0x20000000"WorkRAMSize="0x2000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_64K"BaseAddr="0x0"MaxSize="0x10000"Loader="Devices/HDSC/FlashHC32L13X_64K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L130"WorkRAMAddr="0x20000000"WorkRAMSize="0x2000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_64K"BaseAddr="0x0"MaxSize="0x10000"Loader="Devices/HDSC/FlashHC32L13X_64K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F030"WorkRAMAddr="0x20000000"WorkRAMSize="0x2000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_64K"BaseAddr="0x0"MaxSize="0x10000"Loader="Devices/HDSC/FlashHC32F030_64K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L110x4"WorkRAMAddr="0x20000000"WorkRAMSize="0x800"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_16K"BaseAddr="0x0"MaxSize="0x4000"Loader="Devices/HDSC/FlashHC32L110_16K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L110x6"WorkRAMAddr="0x20000000"WorkRAMSize="0x1000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_32K"BaseAddr="0x0"MaxSize="0x8000"Loader="Devices/HDSC/FlashHC32L110_32K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F003"WorkRAMAddr="0x20000000"WorkRAMSize="0x800"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_16K"BaseAddr="0x0"MaxSize="0x4000"Loader="Devices/HDSC/FlashHC32F003_16K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F005"WorkRAMAddr="0x20000000"WorkRAMSize="0x1000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_32K"BaseAddr="0x0"MaxSize="0x8000"Loader="Devices/HDSC/FlashHC32F005_32K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L15"WorkRAMAddr="0x20000000"WorkRAMSize="0x1800"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/HC32L15.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F_M14"WorkRAMAddr="0x20000000"WorkRAMSize="0x2000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/HC32F_M14.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F46x"WorkRAMAddr="0x20000000"WorkRAMSize="0x10000"Core="JLINK_CORE_CORTEX_M4"/><FlashBankInfoName="Flash_512K"BaseAddr="0x0"MaxSize="0x80000"Loader="Devices/HDSC/HC32F46x.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L19x"WorkRAMAddr="0x20000000"WorkRAMSize="0x8000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_256K"BaseAddr="0x0"MaxSize="0x40000"Loader="Devices/HDSC/FlashHC32L19X_256K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F19x"WorkRAMAddr="0x20000000"WorkRAMSize="0x8000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_256K"BaseAddr="0x0"MaxSize="0x40000"Loader="Devices/HDSC/FlashHC32F19X_256K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F17x"WorkRAMAddr="0x20000000"WorkRAMSize="0x4000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/FlashHC32F17X_128K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L17x"WorkRAMAddr="0x20000000"WorkRAMSize="0x4000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/FlashHC32L17X_128K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32F072"WorkRAMAddr="0x20000000"WorkRAMSize="0x4000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/FlashHC32F072_128K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device><Device><ChipInfoVendor="HDSC"Name="HC32L07X"WorkRAMAddr="0x20000000"WorkRAMSize="0x4000"Core="JLINK_CORE_CORTEX_M0"/><FlashBankInfoName="Flash_128K"BaseAddr="0x0"MaxSize="0x20000"Loader="Devices/HDSC/FlashHC32L07X_128K.FLM"LoaderType="FLASH_ALGO_TYPE_OPEN"AlwaysPresent="1"/></Device>
ע������������� Jlink �(q��)�ӣ���Ҫ���¸������σ�(n��i)����
�(q��)�ӎ���ֲ
�@�����Ǻ��韩������(j��)����ĈD������(y��ng)��ԭ ST ��Ŀ䛽Y(ji��)��(g��u)�м���
�������_
HC32F460 �� BOOT ���_��PB11���Ӹ��ƽ��� Flash ���������ƽ��� BOOT �������c ST �����෴�������� ST �� �A�� �ęn�е��f����
�(q��)�ӎ��Д�̎��
HC32F460 ���(q��)�ӎ��ṩ��һ�� hc32f46x_interrupts.c/h
���ļ���ԓ�ļ������е��Д��M���˽y(t��ng)һ��̎����Ȼ����������(sh��)����ʽ�_�l(f��)����ӿڣ�hc32f46x_it.c
�ж��x�ĺ���(sh��)���� hc32f46x_interrupts.c/h
������������(sh��)�ӿڣ�����������������(sh��)��ʹ��ò�Ʋ����Ǻ�Ҏ(gu��)�������ҵ��Ŀ�У�������(sh��)���]������������(d��o)�����Д�ӿڲ����á����w��Q������
- ���(q��)�ӎ������w���ԅ��� ST �� HAL ���Ќ���������(sh��)��ʹ��
- ����һ���B��������(sh��)�����D��ʾ��
�@ô�㣬������(sh��)��ʹ���ϲ��͏�(f��)�s�������һ�e����
�ڌ��Hʹ���������Дࣨ�Д�̖ 32 ~ 127������ȶ��xһ�����{(di��o)����(sh��)��Ȼ��ʹ�õ��Д�ע�Ե� hc32f46x_interrupts.c/h
�ж��x�ķ������С����磺
/* Select External Int Ch.3 */ stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ3;/* Register External Int to Vect.No.007 */ stcIrqRegiConf.enIRQn = Int007_IRQn;/* Callback function */ stcIrqRegiConf.pfnCallback =&ExtInt03_Callback;/* �@�ﶨ�xһ�����{(di��o)����(sh��) *//* Registration IRQ */enIrqRegistration(&stcIrqRegiConf);
���ڲ���Ҫע�Ե��Д����tֱ�Ӷ��x������(sh��)�ӿ������磺
/** ******************************************************************************* ** \brief SysTick interrupt callback function. ** ** \param None ** ** \retval None ** ******************************************************************************/voidSysTick_IrqHandler(void){SysTick_IncTick();}
���˸��X�@���ļ������Óѝ�ӷ�ƨ�����һ�e���چ��ӵ� .s �ļ��������Д�̎������(sh��)�ӿڶ��ѽ�(j��ng)��������ѭ�h(hu��n)��̎�������@����Д�������һ�����ַų�ȥ����ȫ���Ǟ������Ӵ��a������ʹ���ϛ]���κα��֮̎���@���ļ����g��ͽ� 10K �Ĵ��a����Ȼ��߀��ռһ�� RAM���Л]�п��]�^ MCU 100 �����Д����H���Îׂ���һ���Xȫ�o��һ�Kȥ����
�P(gu��n)��������(sh��)��ʹ����Ո�������� ARM ֮ʮһ__weak �� attribute((weak)) �P(gu��n)�I�ֵ�ʹ��
���� FLASH ���g������Ŀǰ���ڸ��Q HC32F460KETA
���T��
Ŀǰ�����T��������ֻ���ڎ��ļ� hc32f46x_icg.h
���M��������Ȼ�� hc32f46x_icg.c
�������Լ����Ŀ������t�������f�oЧ���ڸ������(q��)�ӎ�Դ�a֮�����ڸ����(q��)�ӎ�r��Ҫע����
���⣬�����@�N���÷������g�ӌ�(d��o)��һ�����}�������҂��ij���֞� IAP �� APP �ɲ��������T�������ñ�횷ŵ� IAP �У��� APP �в����ٰ���ԓ�ļ�����t���{(di��o)ԇ�����r�����e�����wҊ���ĵ� [�������d����] �¹�(ji��)
DMA
��ʹ�ô��� DMA ���յĕr�����l(f��)�F(xi��n)�(q��)�ӎ��ṩ�Ľӿڲ����ܝM�㌍�H��Ҫ�����w���F(xi��n)�������ڵ� DMA �ǹ�����ѭ�h(hu��n)ģʽ�µ����@��Ҫ���ڱ�Ҫ�ĕr����ԫ@ȡ DMA ���յĔ�(sh��)��(j��)�L�������^�(q��)�ӎ�ò�ƛ]�Ќ���(y��ng)�Ľӿ���
DMA �(q��)����ֻ���O(sh��)�ýӿ����]���xȡ�ӿ��� ���o���Լ������ˎׂ��ӿ���
GPIO
�A��(y��ng)ԓ�Q�� PORT
�r�
ò�����A�� MCU �������� ST MCU �Ƶ����_�������P(gu��n)�]ij�� GPIO �ĕr������������� IO �r���o��Ҫ̎��r犵Ć��}��
��������
ijЩ IO ����늕rĬ�J(r��n)�������������ܵġ����磺
- PA13��PA14��PA15��PB3��PB4 �˿ڏ�(f��)λ���ʼ��B(t��i)�� JTAG/SWD ������Ч��
- PC14��PC15 �˿ڏ�(f��)λ���ʼ��B(t��i)�锵(sh��)�ֹ��ܽ�ֹ?f��n)�B(t��i)
- PA11��PA12 �c USBFS_DM��USBFS_DP ���_��(f��)������(n��i)�ؼs 400K�� ��������裬��һֱ��Ч��
- �˿� PB11 �c MD ��(f��)�ã���ݔ�댣�ö˿����oݔ������
�@һ�cò�ƺ� STM32F1x ��ʹ����r��һ�µ�������������Ҫ������� IO ������ͨ IO ʹ�ã��t����M������������Ȼ������M�������� IO ���ã�
- PA13��PA14��PA15��PB3��PB4 ������ FSEL[5:0] �x���ܕr��Ҫ�Ȍ��Ĵ��� PSPCR ����(y��ng)λ�� 0 �oЧJTAG/SWD ����������(y��ng)�Ď캯��(sh��)�ӿ�
en_result_t PORT_DebugPortSetting(uint8_t u8DebugPort, en_functional_state_t enFunc);
- PC14��PC15 ���x��(sh��)�ֹ��ܕr��Ҫ�Ȍ�����(y��ng)�Ĵ��� PCRxy �� DDIS λ�� 0 ��Ч��(sh��)�ֹ������@�����M�� IO ���Õr����
en_result_t PORT_Init(en_port_t enPort, uint16_t u16Pin, const stc_port_init_t *pstcPortInit);
�о��Ќ���(y��ng)��̎���� - ��(d��ng)ϵ�y(t��ng)�\���ڸ��ٕr��������� I/O ݔ��������t�������ڿ��ܟo�����_�xȡݔ���B(t��i)ֵ���˕r��Ҫ�O(sh��)�üĴ��� PCCR.RDWT[1:0]���������ɵȴ�������
���O(sh��)���_ӳ��
���wҊ�Ñ��փԵ� 2.2 ���_���ܱ������ҵ��Ŀ�������F(xi��n)�� SPI_CLK ���_�o��ӳ��Ć��}��
�������d����
��ʹ���аl(f��)�F(xi��n)�������d����֮���������������ҵ��Ŀ�Y(ji��)��(g��u)�� IAP���ھ������� + APP��ÿ�����d APP ֮����IAP �͕��������һ�_ʼ�]�о��w�����e�`��ԭ�����r�����뮔(d��ng)Ȼ��ͨ�^���½�Q������̎����
���������ψD��֮�����ڌ��H���d�ĕr��Keil ����ʾ���µľ��������^ò�ƛ]ɶӰ�
�mȻ�{(di��o)ԇ�]ɶӰ������������� .bin �ļ��r�s�����F(xi��n)�e�`��
�����Hԓ�������]�н�Q������ͨ�^Ԕ��(x��)���������l(f��)�F(xi��n)ԓ���}�����ڿ��T�������Ì�(d��o)�µ������w������ APP �а����� ���T�������������T���������䌍�� FLASH �еĹ̶�һ�K���g���҂��� APP ƫ��֮����Ȼ�]�п��T�����ֵIJ����㷨��
��K��Q������ �҂�����Ҫ����ĸ�����ֻ��Ҫ�����T�������÷ŵ� IAP �м��ɣ� IAP �϶��Ǐ���ʼ��ַ�_ʼ����Ȼ�����І��}��
���O(sh��)����ʼ��
�ҵ��Ŀ�Y(ji��)��(g��u)�� IAP���ھ������� + APP�����O(sh��)�� IAP �й��������������� APP �й������������@��Ҫ�����ڣ����O(sh��)�� IAP ���ѽ�(j��ng)��ʼ����Ȼ�����{(di��o)���� APP ֮�����@�������O(sh��)�����ѽ�(j��ng)����ʼ������(d��o)�²����ٴα���ʼ�����@һ�c�䌍���� ST �� MCU ͬ���m�á��������Ҫ�҂�������̎����
���� hc32f46x_interrupts.c/h
�����õ��Д�������� IAP ���ѽ�(j��ng)���O(sh��)�������D(zhu��n)�� APP �͟o�������������ˣ�ȫ��׃���Е��z���Ƿ������^��
en_result_t enIrqRegistration(const stc_irq_regi_conf_t *pstcIrqRegiConf){// todo, assert ... stc_intc_sel_field_t *stcIntSel; en_result_t enRet = Ok;//DDL_ASSERT(NULL != pstcIrqRegiConf->pfnCallback);DDL_ASSERT(IS_NULL_POINT(pstcIrqRegiConf->pfnCallback));/* IRQ032~127 whether out of range */if(((((pstcIrqRegiConf->enIntSrc/32)*6+32)> pstcIrqRegiConf->enIRQn)|| \ (((pstcIrqRegiConf->enIntSrc/32)*6+37)< pstcIrqRegiConf->enIRQn))&& \ (pstcIrqRegiConf->enIRQn >=32)){ enRet = ErrorInvalidParameter;}else{ stcIntSel =(stc_intc_sel_field_t *)((uint32_t)(&M4_INTC->SEL0)+ \ (4u* pstcIrqRegiConf->enIRQn));if(0x1FFu== stcIntSel->INTSEL)/* ����ѽ�(j��ng)��ʼ���^���@������ٳ�ʼ�� */{ stcIntSel->INTSEL = pstcIrqRegiConf->enIntSrc; IrqHandler[pstcIrqRegiConf->enIRQn]= pstcIrqRegiConf->pfnCallback;}else{ enRet = ErrorUninitialized;}}return enRet;}
���w��������ʹ�� enIrqResign
����(sh��)�M������(bi��o)ӛ��

����admin ����ĕr�g��2021-01-18