[技术问答] HK32F030MF4P6 除了PD6别的不能作为RX吗

[复制链接]
 楼主| 明翰的帅爸爸 发表于 2021-8-27 11:24 | 显示全部楼层 |阅读模式
本帖最后由 明翰的帅爸爸 于 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又可以了
求各位大佬帮忙看看
全部代码

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

  8. #include "usart.h"

  9. static void USART_GPIO_Configurature(void);
  10. static void USART_NVIC_Configurature(void);

  11. void USART_Configurature(void)
  12. {
  13.         USART_InitTypeDef m_usart;
  14.         
  15.         USART_GPIO_Configurature();
  16.         
  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  18.         m_usart.USART_BaudRate = 115200;
  19.         m_usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  20.         m_usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  21.         m_usart.USART_Parity = USART_Parity_No;
  22.         m_usart.USART_StopBits = USART_StopBits_1;
  23.         m_usart.USART_WordLength = USART_WordLength_8b;
  24.         USART_Init(USART1, &m_usart);
  25.         USART_Cmd(USART1, ENABLE);
  26.         
  27.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  28.         
  29.         USART_NVIC_Configurature();
  30. }

  31. void USART_SendByte(uint8_t ch)
  32. {
  33.         while((USART1->ISR & USART_ISR_TXE) == 0);
  34.         USART1->TDR = ch;
  35. }

  36. void USART_SendStringLen(uint8_t *p,uint16_t len)
  37. {
  38.         while(len--)
  39.         {
  40.                 USART_SendByte(*(p++));
  41.         }
  42. }

  43. static void USART_GPIO_Configurature(void)
  44. {
  45.         GPIO_InitTypeDef m_gpio;
  46.         
  47.         USART1_TX_IO_CLK_EN();
  48.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
  49.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  50.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  51.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_IOMUX, ENABLE);
  52.    

  53.         m_gpio.GPIO_Mode = GPIO_Mode_AF;
  54.         m_gpio.GPIO_OType = GPIO_OType_PP;
  55.         m_gpio.GPIO_Pin = USART1_TX_PIN;
  56.         m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
  57.         m_gpio.GPIO_Speed = GPIO_Speed_50MHz;
  58.         GPIO_Init(USART1_TX_PORT, &m_gpio);
  59.         GPIO_PinAFConfig(USART1_TX_PORT, GPIO_PinSource3, GPIO_AF_1);
  60.         
  61.         m_gpio.GPIO_Pin = GPIO_Pin_2;
  62.         GPIO_Init(GPIOD, &m_gpio);
  63.         GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_1);
  64. }

  65. static void USART_NVIC_Configurature(void)
  66. {
  67.         NVIC_SetPriority(USART1_IRQn, 0);
  68.         NVIC_EnableIRQ(USART1_IRQn);
  69. }

  70. void USART1_IRQHandler(void)
  71. {
  72.         uint8_t ch_rx_test;
  73.    
  74.         if((USART1->ISR & USART_ISR_RXNE) != 0)
  75.         {
  76.                 ch_rx_test = USART1->RDR;
  77.                 USART_SendByte(ch_rx_test);
  78.         }
  79. }






ifxz0123 发表于 2021-8-27 16:01 | 显示全部楼层
本帖最后由 ifxz0123 于 2021-8-27 16:03 编辑

看数据手册中关于引脚复用说明,PB4、PB5、PD6、PD7都可以复用为USART1_RX 20210827160228.jpg
 楼主| 明翰的帅爸爸 发表于 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

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部