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