打印
[活动专区]

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

[复制链接]
703|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 | 只看该作者
没有试过,应该还可以吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

1349

帖子

12

粉丝