jinyi7016 发表于 2022-7-13 16:37

【N32G430开发板试用】+STM32的替换过程中的外设使用

本帖最后由 jinyi7016 于 2022-7-13 16:39 编辑


@安小芯
根据原有项目中STM32使用的外设,一一在N32G430上进行实现。
主要有定时器,GPIO,SPI,UART这些外设。
其中的UART,由log功能实现。
由于串口是通过仿真器连接电脑的,可能是驱动的问题,一些串口调试软件存在问题,有时会收不到,使用友善的串口助手就正常了。



一、GPIO+定时器功能
1ms定时,由于period是16位的,定时器的主频应该是64M,所以,这里设置period为64000。
BSTIMClockFrequency=Common_BSTIM_RCC_Initialize(TIM6, RCC_HCLK_DIV4);
                Common_TIM_NVIC_Initialize(TIM6_IRQn, ENABLE);
                Common_TIM_Base_Initialize(TIM6, 64000, 0);
    TIM_Base_Reload_Mode_Set(TIM6, TIM_PSC_RELOAD_MODE_IMMEDIATE);
    TIM_Interrupt_Enable(TIM6, TIM_INT_UPDATE);
    TIM_On(TIM6);顺便把GPIO的功能实现一下,在中断函数中闪LED灯
void TIM6_IRQHandler(void)
{
      
    if (TIM_Interrupt_Status_Get(TIM6, TIM_INT_UPDATE) != RESET)
    {
      TIM_Interrupt_Status_Clear(TIM6, TIM_INT_UPDATE);

      /* Pin PC.06 toggling */
      
                        //log_info("GPIO_Pin_Toggle!\r\n");
                        tim_count++;
                        if(tim_count==1000)
                        {
                              tim_count=0;
                                 GPIO_Pin_Toggle(GPIOA, GPIO_PIN_1);
                              
   
                        }
    }
}二、SPI
由于SPI的引脚与LED的引脚冲突了,所以在调试的时候,把两个工程整合的时候,数据总是不对。去掉冲突的LED配置与操作就正常了,
使用硬件CS功能时,初始化有时会失败,使用软件CS就可以了。

void spi_init()
{
                SPI_I2S_Reset(SPI_MASTER);
      
         /* SPI_MASTER configuration --------------------------------------------------*/
    SPI_Initializes_Structure(&SPI_InitStructure);
    SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;//SPI_DIR_SINGLELINE_TX;//
    SPI_InitStructure.SpiMode       = SPI_MODE_MASTER;
    SPI_InitStructure.DataLen       = SPI_DATA_SIZE_8BITS;
    SPI_InitStructure.CLKPOL      = SPI_CLKPOL_HIGH;
    SPI_InitStructure.CLKPHA      = SPI_CLKPHA_SECOND_EDGE;
    SPI_InitStructure.NSS         = SPI_NSS_SOFT;
    /* It is recommended that the SPI master mode of the C version chips should not exceed 18MHz */
    SPI_InitStructure.BaudRatePres= SPI_BR_PRESCALER_128;
    SPI_InitStructure.FirstBit      = SPI_FB_MSB;
    SPI_InitStructure.CRCPoly       = 7;
    SPI_Initializes(SPI_MASTER, &SPI_InitStructure);
    SPI_Set_Nss_Level(SPI_MASTER, SPI_NSS_HIGH);
      
                /* Enable SPI_MASTER CRC calculation */
    SPI_CRC_Enable(SPI_MASTER);
      
      /* Enable SPI_MASTER */
    SPI_ON(SPI_MASTER);
      
}
void spi_gpio_init(void)
{                              
    GPIO_InitType GPIO_InitStructure;

    GPIO_Structure_Initialize(&GPIO_InitStructure);
    /* Configure master pins: SCK, MISO and MOSI ---------------------------------*/
    /* Confugure SCK and MOSI pins as Alternate Function Push Pull */
    GPIO_InitStructure.Pin      = SPI_MASTER_MOSI_PIN | SPI_MASTER_CLK_PIN | SPI_MASTER_MISO_PIN | SPI_MASTER_NSS_PIN;
    GPIO_InitStructure.GPIO_Mode= GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
    GPIO_InitStructure.GPIO_Alternate = SPI_MASTER_GPIO_ALTERNATE;
    GPIO_Peripheral_Initialize(SPI_MASTER_GPIO, &GPIO_InitStructure);

}
u8 SPI_WriteByte(SPI_Module* SPIx, u8 Byte)
{
    /* Wait for SPI_MASTER Tx buffer empty */
    while (SPI_I2S_Flag_Status_Get(LCD_SPI, SPI_I2S_FLAG_TE) == RESET);
   
    /* Send SPI_SLAVE data */
    SPI_I2S_Data_Transmit(LCD_SPI, Byte);
   
    /* Wait for SPI_SLAVE data reception */
    while (SPI_I2S_Flag_Status_Get(LCD_SPI, SPI_I2S_FLAG_RNE) == RESET);
   
    return SPIx->DAT;

}驱动了一块12864的屏。
void lcd_init(void)
{
      LCD_CS_L();
      LCD_CMD_OFF();
      
      SPI_WriteByte(LCD_SPI, 0xAE);
      SPI_WriteByte(LCD_SPI, 0xA0);
      SPI_WriteByte(LCD_SPI, 0xc8);
      SPI_WriteByte(LCD_SPI, 0x40);
      SPI_WriteByte(LCD_SPI, 0xa6);
      SPI_WriteByte(LCD_SPI, 0xa4);
      SPI_WriteByte(LCD_SPI, 0xA2);
      SPI_WriteByte(LCD_SPI, 0x2f);
      SPI_WriteByte(LCD_SPI, 0x23);
      SPI_WriteByte(LCD_SPI, 0x81);
      SPI_WriteByte(LCD_SPI, 0x2b);
      SPI_WriteByte(LCD_SPI, 0xaf);
      
      
      
      LCD_CS_H();
      
}效果如下:



总结:
整体上API的使用与STM32的基本上是差不多的,相应的工程移植过来的工作量也并不大。
后期就需要把相应的基本功能移植过来,并在稳定性上进行长时间的测试了。






huquanz711 发表于 2022-7-13 18:21

替换还是很容易嘛!

qiu4466 发表于 2022-7-15 08:18

没有试过,应该还可以吧
页: [1]
查看完整版本: 【N32G430开发板试用】+STM32的替换过程中的外设使用