1.在cube里面加rtt包
可以参考这篇文章进行开发:
https://www.cnblogs.com/kmist/p/11829581.html
<https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc>
我不是这种方法。。。还没测试。。。
2.
当然,也可以直接用LL库后,在MDK上用中间件
https://www.keil.com/dd2/Pack/#/third-party-download-dialog
然后程序上,适配一下
将 cube生成的
SysTick_Handler 去掉
hardfault_hadler去掉
psv_handle 去掉
使用msh的话
适配一下串口函数:
char rt_hw_console_getchar() { if( LL_USART_IsActiveFlag_RXNE(USART1) ) return LL_USART_ReceiveData8(USART1); return 0; } void rt_hw_console_output(const char *str) { #if 0 uint16_t i = 0; while( * (str +i) != 0) { LL_USART_TransmitData8(USART1, (uint8_t) *(str + i)); /* Loop until the end of transmission */ while(LL_USART_IsActiveFlag_TXE(USART1) == RESET) { } i++; } #endif printf("%s",str); }
另外,在
board.c中,将串口初始化加进去,当然,主函数里面屏蔽掉
static void MX_USART1_UART_Init(void) { /* USER CODE BEGIN USART1_Init 0 */ /* USER CODE END USART1_Init 0 */ LL_USART_InitTypeDef USART_InitStruct = {0}; LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* Peripheral clock enable */ LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_USART1); LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); /**USART1 GPIO Configuration PA9 ------> USART1_TX PA10 ------> USART1_RX */ GPIO_InitStruct.Pin = LL_GPIO_PIN_9; GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; GPIO_InitStruct.Alternate = LL_GPIO_AF_1; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_10; GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; GPIO_InitStruct.Alternate = LL_GPIO_AF_1; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN USART1_Init 1 */ /* USER CODE END USART1_Init 1 */ USART_InitStruct.BaudRate = 115200; USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; USART_InitStruct.StopBits = LL_USART_STOPBITS_1; USART_InitStruct.Parity = LL_USART_PARITY_NONE; USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; LL_USART_Init(USART1, &USART_InitStruct); LL_USART_DisableIT_CTS(USART1); LL_USART_ConfigAsyncMode(USART1); LL_USART_Enable(USART1); /* USER CODE BEGIN USART1_Init 2 */ /* USER CODE END USART1_Init 2 */ } /** * This function will initial your board. */ void rt_hw_board_init() { /* System Clock Update */ SystemCoreClockUpdate(); /* System Tick Configuration */ _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); MX_USART1_UART_Init(); /* Call components board initial (use INIT_BOARD_EXPORT()) */ #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); #endif }
main里面,时钟初始化函数去掉,OJBK了
注意别用LL_DELAY了,用RTT的delay函数让出cpu
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_SYSCFG); LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); /* System interrupt init*/ /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ // SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* SPI1 */ // LL_SPI_SetRxFIFOThreshold(SPI1,LL_SPI_RX_FIFO_TH_QUARTER); // LL_SPI_Enable( SPI1 ); /* GPIO EXIT */ // LL_EXTI_EnableFallingTrig_0_31( LL_EXTI_LINE_10 ); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ // LL_mDelay(100); // while(NRF24L01_Check()); // printf(" \r\n NRF24L01_RT_Init \r\n"); // NRF24L01_RT_Init(); while (1) { // NRF24L01_TEST(); LL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); // LL_mDelay(500); rt_thread_mdelay(1000); // printf("123"); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }