ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
776378 Топик полностью
go (26.08.2017 13:42 - 19:28, просмотров: 121) ответил vllv на Вот так
так надо просто не ставить галки на ненужные функции. совсем кривой там приемник, невозможно просто висеть в нем и обрабатывать в прерываниях приходящие байты (при инициализации надо задать число принимаемых байт). просто вставить функцию приемника в USER CODE void USART2_IRQHandler(void) { /// } а приемник инициализировать руками типа USART2 -> CR1 |= USART_CR1_RXNEIE | USART_CR1_RE; USART2 -> CR3 = USART_CR3_DMAT; // | USART_CR3_DMAR; /* (2) */ HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); передавать логично по DMA, запретив вообще прерывания усарта в кубе. Но в таком варианте передаст только одну строку (там наворочено, чтобы честно дождаться выхода последнего байта до конца). Чтобы заработало, можно поправить функцию /** * @brief DMA UART transmit process complete callback. * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; /* DMA Normal mode*/ if ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) ) { huart->TxXferCount = 0; /* Disable the DMA transfer for transmit request by setting the DMAT bit in the UART CR3 register */ CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); /* Enable the UART Transmit Complete Interrupt */ //////// __HAL_UART_ENABLE_IT(huart, UART_IT_TC); EDITED huart ->State = HAL_UART_STATE_READY; } /* DMA Circular mode */ else { HAL_UART_TxCpltCallback(huart); } } К сожалению, править ее придется после каждой перегенерации кода кубом ещё проверить, может для вашего камня существуют low level функции (префикс ll). Такой откат к SPL...