本帖最后由 明翰的帅爸爸 于 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);
- }
- }
|