打印
[技术问答]

HK32F030MF4P6 除了PD6别的不能作为RX吗

[复制链接]
3849|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 明翰的帅爸爸 于 2021-8-27 11:26 编辑

在官方例程上直接修改这两个地方,将PD6改为PD2
static void USART_GPIO_Configurature(void)
{
        GPIO_InitTypeDef m_gpio;
       
        USART1_TX_IO_CLK_EN();
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_IOMUX, ENABLE);


        m_gpio.GPIO_Mode = GPIO_Mode_AF;
        m_gpio.GPIO_OType = GPIO_OType_PP;
        m_gpio.GPIO_Pin = USART1_TX_PIN;
        m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
        m_gpio.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(USART1_TX_PORT, &m_gpio);
        GPIO_PinAFConfig(USART1_TX_PORT, GPIO_PinSource3, GPIO_AF_1);
       
        m_gpio.GPIO_Pin = GPIO_Pin_2;
        GPIO_Init(GPIOD, &m_gpio);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_1);
}


发现不能进入接收中断,试了PD1/3/4也不行,改回GPIO_Pin_6和GPIO_PinSource6又可以了
求各位大佬帮忙看看
全部代码

/**************************************************************************************************
* [url=home.php?mod=space&uid=288409]@file[/url]      usart_async_tx_no_int_rx_rxneint.c
* [url=home.php?mod=space&uid=247401]@brief[/url]     异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将
*            收到的数据原样通过TX引脚发送出去
* [url=home.php?mod=space&uid=187600]@author[/url]    veiko.c
* [url=home.php?mod=space&uid=212281]@date[/url]      20200202
**************************************************************************************************/

#include "usart.h"

static void USART_GPIO_Configurature(void);
static void USART_NVIC_Configurature(void);

void USART_Configurature(void)
{
        USART_InitTypeDef m_usart;
        
        USART_GPIO_Configurature();
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
        m_usart.USART_BaudRate = 115200;
        m_usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        m_usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        m_usart.USART_Parity = USART_Parity_No;
        m_usart.USART_StopBits = USART_StopBits_1;
        m_usart.USART_WordLength = USART_WordLength_8b;
        USART_Init(USART1, &m_usart);
        USART_Cmd(USART1, ENABLE);
        
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
        
        USART_NVIC_Configurature();
}

void USART_SendByte(uint8_t ch)
{
        while((USART1->ISR & USART_ISR_TXE) == 0);
        USART1->TDR = ch;
}

void USART_SendStringLen(uint8_t *p,uint16_t len)
{
        while(len--)
        {
                USART_SendByte(*(p++));
        }
}

static void USART_GPIO_Configurature(void)
{
        GPIO_InitTypeDef m_gpio;
        
        USART1_TX_IO_CLK_EN();
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_IOMUX, ENABLE);
   

        m_gpio.GPIO_Mode = GPIO_Mode_AF;
        m_gpio.GPIO_OType = GPIO_OType_PP;
        m_gpio.GPIO_Pin = USART1_TX_PIN;
        m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
        m_gpio.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(USART1_TX_PORT, &m_gpio);
        GPIO_PinAFConfig(USART1_TX_PORT, GPIO_PinSource3, GPIO_AF_1);
        
        m_gpio.GPIO_Pin = GPIO_Pin_2;
        GPIO_Init(GPIOD, &m_gpio);
        GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_1);
}

static void USART_NVIC_Configurature(void)
{
        NVIC_SetPriority(USART1_IRQn, 0);
        NVIC_EnableIRQ(USART1_IRQn);
}

void USART1_IRQHandler(void)
{
        uint8_t ch_rx_test;
   
        if((USART1->ISR & USART_ISR_RXNE) != 0)
        {
                ch_rx_test = USART1->RDR;
                USART_SendByte(ch_rx_test);
        }
}






使用特权

评论回复

相关帖子

沙发
ifxz0123| | 2021-8-27 16:01 | 只看该作者
本帖最后由 ifxz0123 于 2021-8-27 16:03 编辑

看数据手册中关于引脚复用说明,PB4、PB5、PD6、PD7都可以复用为USART1_RX

使用特权

评论回复
板凳
明翰的帅爸爸|  楼主 | 2021-8-27 16:20 | 只看该作者
ifxz0123 发表于 2021-8-27 16:01
看数据手册中关于引脚复用说明,PB4、PB5、PD6、PD7都可以复用为USART1_RX

感谢大佬
我现在板子RX接的是PD2,只能用软件模拟串口了,下一版再改

使用特权

评论回复
地板
cooldog123pp| | 2021-8-28 10:17 | 只看该作者
感觉这应该是FAE才能回答的问题了把,希望楼主尽快解决问题~

使用特权

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

本版积分规则

3

主题

7

帖子

0

粉丝