本帖最后由 非凡378159128 于 2021-4-10 22:49 编辑
工程文件:IAR V6.7
HK32F030MJ4M6-IOMUX-IAR_V6.7.zip
(255.25 KB)
首先已经宏定义了芯片型号
#define HK32F030MJ4M6 //定义芯片型号
用以下代码可以成功的把HK32F030MJ4M6的第1脚输出高电平点亮LED
int main(void)
{
GPIO_InitTypeDef m_gpio;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_IOMUX, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
m_gpio.GPIO_Mode = GPIO_Mode_OUT;
m_gpio.GPIO_OType = GPIO_OType_PP;
m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
m_gpio.GPIO_Speed = GPIO_Speed_Level_2;
m_gpio.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOD, &m_gpio);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
while (1)
{
}
}
但是用以下代码则无法把HK32F030MJ4M6的第1脚输出高电平
int main(void)
{
GPIO_InitTypeDef m_gpio;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_IOMUX, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
m_gpio.GPIO_Mode = GPIO_Mode_OUT;
m_gpio.GPIO_OType = GPIO_OType_PP;
m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
m_gpio.GPIO_Speed = GPIO_Speed_Level_2;
//PD6 TO PA1 as GPIO
m_gpio.GPIO_Pin = GPIO_Pin_1;
GPIO_IOMUX_ChangePin(IOMUX_PIN1, IOMUX_PD6_SEL_PA1); //SOP8 PIN1(PD6) PA1 IO
GPIO_Init(GPIOA, &m_gpio);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
while (1)
{
}
}
也试过直接用寄存器操作也是没有任何效果
GPIOMUX->PKG_PIN_SEL |= IOMUX_PD6_SEL_PA1;
就像是IOMUX时钟没有被打开一样
所以不止是第1脚不能映射,所有支持映射的IO管脚都试过都不行
不知道有朋友遇到过类似问题没?
注:我试过HK32F030MF4P6可以成功将NRST管脚映射成PA0使用,但HK32F030MJ4M6死活不行,
GPIOMUX->NRST_PIN_KEY = 0x5AE1;
GPIOMUX->NRST_PA0_SEL = 0x01; //将NRST管脚映射为PA0管脚使用
结贴:芯片的问题,换一个芯片就好了,芯片居然只坏端口映射部分
|