donatello1996 发表于 2018-1-14 21:24

【NUCLEO-L4R5ZI评测】点灯&使用板载串口发送

本帖最后由 donatello1996 于 2018-1-14 21:29 编辑

    俗话说万物皆从点灯开始,这次帖子就操作GPIO和STLINK串口。
    由于L4+系列需要用到CubeL4 1.10最新版本的固件库,之前的1.7-1.9版本固件库都没法使用,所以要去官方更新最新版本,这里顺便给出下载链接:
固件下载地址



然后,将STLINK的USB接口插上电脑,装好驱动之后可以被电脑识别为STLINK仿真接口+虚拟串口:

在官网下载电路图,这里直接给出:

打开L4+板子的电路图,得知STLINK串口与板子的LPUART1串口相连,引脚为PG7和PG8,需要注意的是,在CubeMX中,LPUART1默认引脚为PC0和PC1,我们需要手动将引脚改回来:

板载红色LED灯LD3与PG14相连,在CubeMX中启用即可GPIO_Output模式即可:

LD1本期帖子不理会:

到了主频设置界面,直接将系统主频设置为官方默认主频120MHz,输出120回车后,CubeMX会提示该主频与时钟源不匹配,只需直接回车跟随软件设置即可:

来到外设设置界面,打开LPUART1设置窗口,将波特率设置为115200,数据位设置为8位:

打开工程设置界面,设置固件库为HAL库(本期帖子讲解HAL库,以后讲解LL库):

设置固件库存放地址,也就是上面提到的要下载的固件:

设置好之后生成工程文件夹:

打开工程配置界面,勾选MicroLIB复选框,以支持printf函数输出:

工程烧录设置中有一点需要注意,选择FLASH的型号必须为STM32L4Rx 2MB Flash Dual,不能选错,否则会提示一连串的Contents mismatch at: 08001001H错误:

工程配置完毕之后就可以写代码了,来看看LPUART1串口初始化代码:
void LPUART1_Init(int baud)
{
      HAL_PWREx_EnableVddIO2();
      __HAL_RCC_GPIOG_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

      __HAL_RCC_LPUART1_CLK_ENABLE();
LPUART1_Handler.Instance = LPUART1;
LPUART1_Handler.Init.BaudRate =baud;
LPUART1_Handler.Init.WordLength = UART_WORDLENGTH_8B;
LPUART1_Handler.Init.StopBits = UART_STOPBITS_1;
LPUART1_Handler.Init.Parity = UART_PARITY_NONE;
LPUART1_Handler.Init.Mode = UART_MODE_TX_RX;
LPUART1_Handler.Init.HwFlowCtl = UART_HWCONTROL_NONE;
LPUART1_Handler.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
LPUART1_Handler.Init.ClockPrescaler = UART_PRESCALER_DIV1;
LPUART1_Handler.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
LPUART1_Handler.FifoMode = UART_FIFOMODE_DISABLE;
HAL_UART_Init(&LPUART1_Handler);

HAL_UARTEx_SetTxFifoThreshold(&LPUART1_Handler, UART_TXFIFO_THRESHOLD_1_8);
HAL_UARTEx_SetRxFifoThreshold(&LPUART1_Handler, UART_RXFIFO_THRESHOLD_1_8);

}



延时函数代码:
void Delay_us(int n)
{
      while(n--);
}

void Delay_ms(int n)
{
                while(n--)
                        Delay_us(1000);
}

main函数代码:
int main()
{

HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
LPUART1_Init(115200);
      printf("\nEEWORLD论坛 stm32/stm8专区\n");
      printf("【NUCLEO-L4R5ZI评测】点灯&使用板载串口发送\n");
      printf("donatello1996\n");
while (1)
{
                HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14);
                Delay_ms(100);
}

}

闪灯效果:

上传工程文件:



页: [1]
查看完整版本: 【NUCLEO-L4R5ZI评测】点灯&使用板载串口发送