首先感谢21ic和辛苦的工作人员组织这次活动,也感谢ST公司提供最新的开发板进行试用。
我拿到的是NUCLEO-L552ZE-Q开发板。给小伙伴们展示一下板子的细节吧。
随快递一起寄来的还有论坛去年印刷的《STM32粉丝精选集》,这些**也还是很有参考意义的,比如《同学们,ST关于i2c-e2prom的例子,修改一下几点就可以了》。
下边开始本次的试用分享:点灯。
使用定时器做基本的延时控制,使用按钮控制3个LED,按下点亮、抬起熄灭。
由于L5系列是st最新的芯片,所以第一步就是准备相关的工具软件。
将CubeMX软件更新到最新版本(低版本没有L5系列芯片),然后安装L5系列的软件包。
keil软件也要更新相应的PACK,我使用的是KEIL V5.23 ,在“pack installer"也是没有L5系列,所以直接在KEIL官网下载《Keil.STM32L5xx_DFP.1.1.0.pack》文件,手动在“pack installer"中安装即可。(根据后边的试验,最好是安装KEIL V5.27版本)
完成以上准备工作,就可以开始试验了。
首先打开CubeMX,选择STM32L552ZET芯片,新建工程。这时候我们会看到一个提示:
L5系列芯片使用基于内置Arm TrustZone硬件安全技术的ArmCortex-M33 32位RISC处理器内核,所以才会有此提示。由于对芯片不熟悉,我选择了NO,暂时不使用TrustZone。这样大家看到的界面就跟使用其他系列芯片时差不多(我自己点击yes看了一下,在配置上还是有很大差异的,很多外设会增加一些复选框)。
正式配置CubeMX工程,首先配置时钟,在HCLK中输入16MHz,让CubeMX自己配置时钟;
然后配置debug信息,以往用其他芯片都是在内核的sys中配置,可是L5的sys内容与其他的不一样,L5中没有debug;
仔细查找一下发现L5的debug是一个单独的选项,我们选择串行线调试;
配置相应的IO口,我们需要用到一个按钮、三个LED(考虑后边的一个试验,也同时配置了一路串口)。看一下原理图,找出相应的引脚:
对照原理图,配置PC13为输入口,取名B1;配置PC7\PB7\PA9为输出口,取名LD1\LD2\LD3:
串口使用stlink自带的串口,这个串口已经直接与单片机的串口在板内连接,可以省去串口工具并简化试验接线:
使用单片机LPUART1串口,由于连接的两个引脚并非LPUART1的默认引脚,是映射脚,所以需要在cubeMX中手动选择原理图中的两个引脚,并配置成LPUART1_TX\LPUART1_RX,通过LPUART1配置是能异步串行方式,配置波特率115200,8位数据,无校验,1停止位。
配置定时器,选择TIM3作为定时器,使用内部时钟源,定时时间约1ms:
配置外设中断,可以每个模块单独配置,也可以在NVIC中集中配置。
至此,CubeMX中的各种配置已经基本完成,可以配置工程选项了:
这里的几个选项卡都根据自己的情况酌情配置,值得一提的是,这里选择MDK-ARM时,选择的最小版本号是V5.27(前文已经提及我用的V5.23,这个在使用中可能会有问题)。配置完成后,点击“GENERATE CODE”生成初始化代码。
在keil中,增加代码一般在生成代码允许的区域进行,否则重新生成代码时用户代码会被清理。
增加如下:
1、增加全局变量定义,并在main函数中初始化:
uint8_t key; //可以作为局部变量定义到main函数中
__IO uint8_t timCnt;
__IO uint8_t timFlag; //本行的__IO必须使用,我不用时代码执行有错误,不知道是不是keil版本问题
2、在while(1)之前,增加打开定时器TIM3的函数调用:HAL_TIM_Base_Start_IT(&htim3);
3、在while(1)中增加如下代码段,实现功能:
if(timFlag == 1)
{
key = HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
if(key == 0)
{
HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
}
timFlag = 0;
}
4、增加定时器回调函数的编写:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
timCnt++;
if(timCnt >= 10)
{
timCnt = 0;
timFlag = 1;
}
}
编译整个工程。
配置选项,选择stlink和对应芯片后就可以烧录了,可是我的stlink在哪里呢?
没有stlink选项,干脆用st的utility工具进行下载后验证吧。
使用utility工具,按下图标注的顺序点击1、连接开发板(根据utility的配置,可能需要手动按下开发板复位按钮),2、打开刚刚编译生成的hex文件(此步骤可省略,在后边步骤完成)3、编程和校验,弹出新窗口。
如上边的第二步没有做,则需要在此处1打开相应的hex文件(如是多次编译验证,每次都要重装HEX文件)2、start就可以烧录了(如有其他配置需要,可在start前自行点击确认)。
烧录完成可以看到窗口的下边有如下显示。utility一般下载完成,程序就在板上自动运行了。
看一下效果:
|