XZHDJH

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 */
}

 

 

 

分类:

技术点:

相关文章: