rtyu789 发表于 2024-10-6 00:04

ST NUCLEO-WB09KE-程序烧录

<div class='showpostmsg'># 程序烧录

## 安装pack包
本次开发式使用STM32CubeMX生成HAL库的方式,使用Keil5工具进行开发

首先下载软件pack包,在STM32CubeMX的Help->Manage embedded software packages选项卡下,选择STM32WB0系列芯片


!(/data/attachment/forum/202410/06/000204jvhyoh3cf03fw5y3.png.thumb.jpg?rand=8358.199841270924)

!(/data/attachment/forum/202410/06/000204tl1d004o7zklorq0.png.thumb.jpg?rand=9599.192292297656)

由于之前查看C盘的时候,看到STM32CubeMX的默认安装路径为C盘,占用了很大的空间,所以修改到了其他的位置,我修改的位置是:
E:\STM32CubeMX\Repository\
所以下载的pack包的位置是
E:\STM32CubeMX\Repository\STM32Cube_FW_WB0_V1.0.0\Utilities\PC_Software\Keil.STM32WB0x_DFP.1.0.0
手动打开就Keil5中就可以安装上了

!(/data/attachment/forum/202410/06/000205vv3ypwipsisuvfij.png.thumb.jpg?rand=9217.822308363824)

!(/data/attachment/forum/202410/06/000206n9w7sotwsj0jzabs.png.thumb.jpg?rand=1678.8377833801337)


# HAL库配置

使用STM32CubeMX配置HAL库总共有三种主要的方式
1. MCU/MPU Select——主要针对从芯片分类中选择
2. Board Selector——如果有开发板的话,可以选择开发板
3. Example Select——选择指定的MCU,可以看到官方为这块芯片开发的例程

!(/data/attachment/forum/202410/06/000206mwwrgco4wg9hrr20.png.thumb.jpg?rand=7176.2901111911215)

!(/data/attachment/forum/202410/06/000207brb2c4299cc7lgzn.png.thumb.jpg?rand=4960.723983571269)

!(/data/attachment/forum/202410/06/000208z5yoh88h8d55dhlo.png.thumb.jpg?rand=5193.652276601244)


先通过例程来熟悉这块开发板,所以先选择了GPIO_IOToggle来尝试,选择路径,直接安装,之后通过Keil5编译,所以选择MDK-ARM

!(/data/attachment/forum/202410/06/000209x9rzkxurrjz9u7wa.png.thumb.jpg?rand=3323.839526217904)


# Keil5程序烧录

由于板子上自带了ST-Link,所以在Keil5中选择ST-Link仿真器

!(/data/attachment/forum/202410/06/000210gaxv2w4r3f2r4d4j.png.thumb.jpg?rand=6444.480964435668)
点击setting,进行具体的配置,注意,一定需要将跳线帽转到和上面连接,setting界面才能正确识别

!(/data/attachment/forum/202410/06/000210wpo9v702o7o0grzr.png.thumb.jpg?rand=5161.115480333045)
编译,下载,开发板没有任何变化!!!!
唔,正常程序下载后,开发板不会运行新的程序,需要在setting中将这个勾选,就可以烧写后自动运行
LED灯就开始交替闪烁啦

!(/data/attachment/forum/202410/06/000210d74vd8jj7jd8lzhv.png.thumb.jpg?rand=3100.4302936256445)


```C++
// stm32wb0x_nucleo.h
#define LEDn                                 3U
#if defined(NUCLEO_WB09KE) || defined(NUCLEO_WB05KZ)
#define LD1_GPIO_PORT                        GPIOB
#define LD1_GPIO_CLK_ENABLE()                  __HAL_RCC_GPIOB_CLK_ENABLE()
#define LD1_PIN                              GPIO_PIN_1

// main.c
int main(void)
{
HAL_Init();

SystemClock_Config();

PeriphCommonClock_Config();

MX_GPIO_Init();

LD1_GPIO_CLK_ENABLE();
LD2_GPIO_CLK_ENABLE();


GPIO_InitStruct.Mode= GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull= GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_InitStruct.Pin = LD1_PIN;
HAL_GPIO_Init(LD1_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LD2_PIN;
HAL_GPIO_Init(LD2_GPIO_PORT, &GPIO_InitStruct);

while (1)
{
    HAL_GPIO_TogglePin(LD1_GPIO_PORT, LD1_PIN);
    HAL_Delay(100);
    HAL_GPIO_TogglePin(LD2_GPIO_PORT, LD2_PIN);
    HAL_Delay(100);
}
}


// stm32wb0x_hal_gpio.c
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
uint32_t odr;

assert_param(IS_GPIO_PIN(GPIO_Pin));

odr = GPIOx->ODR;

GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
}
```


程序分析,主函数中初始化了LED灯的GPIO引脚,在大循环中改变LED灯的电平,实现LED灯交替闪烁



### 一些建议
STM32CubeMX的用户体验上总体不是很顺畅,不知道未来是否有改进的机会:
1. 登录问题,登录界面十分的卡顿,而且连接十分缓慢
2. 无法磁吸屏幕,在新建project的时候,如果需要挑选芯片或者例程,都需要自己手动调节分辨率大小,芯片数量十分的多,交互不太友好,并且使用win+方向键,不支持屏幕磁吸
3. 双屏拖动无法适应,我的外接显示器是4K的,笔记本显示屏是2K,在4K显示屏上将界面拖的很大,为了看到更多的信息,但是拖到笔记本显示屏上,窗口比例不会变化,下面的信息都看不到了
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                               
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: ST NUCLEO-WB09KE-程序烧录