홈>
다음 코드의 문제점을 이해하지 못합니다. 모두 전송에 적합하지만 수신에 대해서는 인터럽트가 호출되지 않습니다.
오실로스코프는 정확한 송수신 데이터를 보여줍니다.
#define CONSOLE_RXD_PIN 12
#define CONSOLE_TXD_PIN 11
static USART_InitTypeDef ConsoleUartConfig = {CONSOLE_BAUD_RATE, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No, USART_Mode_Rx | USART_Mode_Tx, USART_HardwareFlowControl_None};
static GPIO_InitTypeDef HAL_TXDGpioConfiguration = {(1 << CONSOLE_TXD_PIN), GPIO_Mode_AF, GPIO_Speed_50MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL};
static GPIO_InitTypeDef HAL_RXDGpioConfiguration = {(1 << CONSOLE_RXD_PIN), GPIO_Mode_AF, GPIO_Speed_50MHz, GPIO_OType_PP, GPIO_PuPd_UP};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_Init(GPIOA, (GPIO_InitTypeDef *)&HAL_TXDGpioConfiguration);
GPIO_PinAFConfig(GPIOA, CONSOLE_TXD_PIN, CONSOLE_UART_GPIO_AF);
GPIO_Init(GPIOA, (GPIO_InitTypeDef *)&HAL_RXDGpioConfiguration);
GPIO_PinAFConfig(GPIOA, CONSOLE_RXD_PIN, CONSOLE_UART_GPIO_AF);
USART_Init(USART6, &ConsoleUartConfig);
USART_ITConfig(USART6, USART_IT_TXE, ENABLE);
USART_ITConfig(USART6, USART_IT_RXNE, ENABLE);
NVIC_InitStruct.NVIC_IRQChannel = USART6_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_InitStruct);
USART_Cmd(HAL_UartContext.Base, ENABLE);
stm32f413Z 핵 보드입니다.
업데이트 : HAL과 동일하게 시도했지만 여기에서 USART6_IRQHandler 함수도 rx에 대해 호출되지 않았습니다.
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_USART6_CLK_ENABLE();
#define CONSOLE_TXD_PIN LL_GPIO_PIN_11
/* Configure Tx Pin as : Alternate function, High Speed, Push pull, Pull up */
LL_GPIO_SetPinSpeed(GPIOA, CONSOLE_TXD_PIN, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinOutputType(GPIOA, CONSOLE_TXD_PIN, LL_GPIO_PULL_NO);
LL_GPIO_SetPinPull(GPIOA, CONSOLE_TXD_PIN, LL_GPIO_PULL_UP);
LL_GPIO_SetPinMode(GPIOA, CONSOLE_TXD_PIN, LL_GPIO_MODE_ALTERNATE);
LL_GPIO_SetAFPin_8_15(GPIOA, CONSOLE_TXD_PIN, LL_GPIO_AF_8);
#define CONSOLE_RXD_PIN LL_GPIO_PIN_12
/* Configure Rx Pin as : Alternate function, High Speed, Push pull, Pull up */
LL_GPIO_SetPinSpeed(GPIOA, CONSOLE_RXD_PIN, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinOutputType(GPIOA, CONSOLE_RXD_PIN, LL_GPIO_OUTPUT_PUSHPULL);
LL_GPIO_SetPinPull(GPIOA, CONSOLE_RXD_PIN, LL_GPIO_PULL_NO);
LL_GPIO_SetPinMode(GPIOA, CONSOLE_RXD_PIN, LL_GPIO_MODE_ALTERNATE);
LL_GPIO_SetAFPin_8_15(GPIOA, CONSOLE_RXD_PIN, LL_GPIO_AF_8);
NVIC_SetPriority(USART6_IRQn, 0);
NVIC_EnableIRQ(USART6_IRQn);
LL_USART_EnableIT_TXE(USART6);
LL_USART_EnableIT_RXNE(USART6);
LL_USART_SetTransferDirection(USART6, LL_USART_DIRECTION_TX_RX);
/* 8 data bit, 1 start bit, 1 stop bit, no parity */
LL_USART_ConfigCharacter(USART6, LL_USART_DATAWIDTH_8B, LL_USART_PARITY_NONE, LL_USART_STOPBITS_1);
LL_USART_SetHWFlowCtrl(USART6, LL_USART_HWCONTROL_NONE);
/* Reset value is LL_USART_OVERSAMPLING_16 */
LL_USART_SetOverSampling(USART6, LL_USART_OVERSAMPLING_16);
const uint32_t pclk = __LL_RCC_CALC_PCLK2_FREQ(SystemCoreClock,
LL_RCC_GetAPB2Prescaler());
LL_USART_SetBaudRate(USART6, pclk, LL_USART_OVERSAMPLING_16, 9600);
LL_USART_Enable(USART6);
인터럽트 루틴은 다음과 같습니다 :
void USART6_IRQHandler(void)
{
uint32_t stateflg;
if (LL_USART_IsActiveFlag_RXNE(USART6) || LL_USART_IsActiveFlag_ORE(USART6))
{
LL_USART_ReceiveData8(USART6);
}
if (LL_USART_IsActiveFlag_TXE(USART6))
{
uint8_t data = 0;
}
}
- 답변 # 1
관련 자료
- Android 11: 루트를 사용해도 Android /data의 내용을 볼 수 없음
- STM32 Usart 수신 인터럽트는 한 번만 작동
- javascript - Lambda를 사용하여 S3의 데이터에 액세스 할 수 없음
- json - Cant Xamarin Forms 목록에 내 데이터 피드
- php - codeigniter - 컨트롤러가 볼 데이터를 보낼 수 없습니다
- javascript - 캔 트는 POST 요청에서 양식 데이터를 얻습니다
- sockets - C ++에서 http/https 포트에서 데이터를 보내고받는 방법은 무엇입니까?
- python - 이 데이터 소스를 찾을 수 없습니다
- react native - Axios에서 데이터를 가져올 수 없습니다
- vuejs2 - vue에서 데이터 바인딩이 제대로 작동하지 않습니다
- php - 드롭 다운 HTML의 데이터를 SQL에 삽입 할 수 없습니다
- android - 데이터를 삽입 할 수 없습니다
- vb.net - Access 2007 데이터베이스에 데이터를 저장할 수 없습니다
- python - txt 파일의 데이터로 if 문을 수행 할 수 없습니다
- c# - MongoDB 데이터 수신이 너무 느립니다
- vue.js - VueJS 3 axios가 데이터를 가져올 수 없습니다
- swift - 데이터를 저장할 수 없으며 클로저에서 TableView를 다시로드 할 수 없습니다
- javascript - mongoDB 데이터를 표시 할 수 없습니다
- php - 배열 데이터를 요청할 수 없습니다
- javascript - Ajax 호출에서받은 PHP 데이터를 편집 할 수 없습니다
관련 질문
- 구성 할 때 STM32 DMA 레지스터에 액세스 할 수 없습니다
- stm32 - STM32F4 USART1이 올바르게 작동하지 않으며 가비지 데이터를 리턴 함
- freertos : LwIP를 초기화하면 RTOS가 작동을 멈춥니다.
- c - 이 #define을 이해하려고
- arm - C의 STM32F4 MCU에 log2가 결함을 일으킴
- c - STM32 및 TLV5628 SPI 통신
- stm32 - 느린주기적인 데이터에 DMA 전송을 사용하는 데 한계가 있습니까?
- stm32 - cortex-M3 및 cortex-M7에 대한 SRAM 소비
- stm32 - 인터럽트가 발생하지 않습니다
GPIO 핀의 일반적인 초기화 구조는 다음과 같습니다 :
그래서 이것은 초기화와 일치하지 않습니다. 첫 번째 매개 변수는 사용중인 핀이어야합니다.
일반적으로 매개 변수 위치를 쉽게 변경할 수 있으므로 이런 종류의 초기화를 사용하지 않는 것이 좋습니다. 컴파일러가 이전 버전이 아닌 경우 다음과 같이 "이름이 지정된"방식을 사용할 수 있습니다.
추가 :
해야합니다