- 2024-09-16
-
回复了主题帖:
【NUCLEO-WB09KE】开箱及开发环境测试
不知道为什么链接配对成功,但是windows中没有出现串口设备。我的windows是win10,蓝牙是4.0模块。是不是需要5.4的模块呀
- 2024-09-15
-
发表了主题帖:
【NUCLEO-WB09KE】开箱及开发环境测试
1、开发板介绍
NUCLEO-WB09KE,其中核心MCU STM32WB09KE为超低功耗Arm Cortex-M0+ MCU,运行频率64 MHz,具有512 KB Flash存储器、64 KB RAM,支持Bluetooth LE 5.4。这个与ST公司推出的STM32WB的其它系列采用的是基于以64 MHz运行的Arm® Cortex®‐M4内核,该系列从结构上推断STM32WB0XX应该功耗要更低。 Bluetooth®低功耗5.4的传输距离更长,速度快的特点。我拿到手的ST NUCLEO-WB09KE开发板是由两块组成的。下层的是ST-Link调试和按键、LED开发板。上层是蓝牙核心开发板。
2、开发环境搭建
开发环境搭建的测试只测试出了keil的环境。STM32CubeProgrammer的环境一直没有成功,我为此还下载了最新版本的环境。VSCode+OpenOCD的环境因为没有STM32WB0XX芯片的支持有没有成功。期待ST能够尽快的完善该款芯片的支持。
(1)首先下载或升级STM32CubeMX的最新版本。从首页安装添加STM32WB0的支持包。
最新版本是默认支持的。低版本可能无法安装该支持包,因此需要新版STM32Cube
安装完成后安装keil的支持。
(2)STM32WB0的芯片在keil的官方无法直接获得支持包。需要手工安装该开发包。
从C:\Users\[username]\STM32Cube\Repository\STM32Cube_FW_WB0_V1.0.0\Utilities\PC_Softwarem目录可以获得keil和IAR的支持包。
(3)手工安装该支持包到keil环境。
解压zip文件
单机文件或从keil包管理其中手工安装
(4)从STM32Cube中导入STM32WB0的BLE_SerialPort_Server 例程。
(5)烧录程序到开发板
完成后就可以测试。
3、测试过程
烧录前需要将开发板的启动模式使用跳线设置为Bootloader模式,否则无法烧写程序。
上电后如果再次烧写程序,需要按开发板的RESET按钮!!!
(2)windows PC的蓝牙中可以添加SPortS_5C的设备。
(3)链接配对完成
至此环境搭建成功
- 2024-09-13
-
回复了主题帖:
反激电源新手看过来,开源项目准备好了,是时候动手了~
很好,谢谢楼主总结
- 2024-09-12
-
回复了主题帖:
ST NUCLEO-WB09KE无法烧录问题
okhxyyo 发表于 2024-9-12 17:40
好的,那你先看看他说的这个问题,这样是不是可以了。我把你 新反馈的这个问题转人看看啥情况
不过通过keil也可以烧录程序了。只是STM32CubeProgrammer的问题依然存在
-
回复了主题帖:
ST NUCLEO-WB09KE无法烧录问题
okhxyyo 发表于 2024-9-12 16:56
你反馈的这个问题是不是跟另外一个网友说找不到WB09的PACK一个情况???
这里是ST那边的反馈:
...
不是一个问题。但是他说的这个问题我这里也需要。
-
回复了主题帖:
【ST NUCLEO-WB09KE测评】-2-基于CubeIDE的开发环境搭建
15:55:04 : STM32CubeProgrammer API v2.17.0 | Windows-64Bits
15:55:13 : UR connection mode is defined with the HWrst reset mode
15:55:13 : ST-LINK SN : 004C00213233510D39363634
15:55:13 : ST-LINK FW : V3J13M4B5S1
15:55:13 : Board : NUCLEO-WB09KE
15:55:13 : Voltage : 3.28V
15:55:13 : Error: No STM32 target found! If your product embeds Debug Authentication, please perform a discovery using Debug Authentication
就是这些提示。不知道哪里的问题
-
回复了主题帖:
【ST NUCLEO-WB09KE测评】-2-基于CubeIDE的开发环境搭建
MB2032B上面的JP1就看可以,不用使用CN3的5,7pin,但是我的板子虽然keil能够认识,但是STM32CubeProgrammer无法烧录。
STM32CubeProgrammer无法烧录
就是邪门了。
-
发表了主题帖:
ST NUCLEO-WB09KE无法烧录问题
1、板子设置如下:
MB2032B板子为Bootloader 模式JP1,PA10引脚为High,非默认。
2、其它设置为默认。
3、 keil可以发现MCU,但是由于没有该芯片STM32WB0X的支持,无法烧录。
4、使用STM32CubeProgrammer烧录出现ST-LINK能够认出,但是无法烧录。
“Error:No STM32 target found! If your product embeds Debug Authentication,please perform a discovery using debug Authentication”
提示,无法链接板子。
请问,大家有没有碰到这样的问题。
- 2024-09-06
-
回复了主题帖:
测评入围:ST NUCLEO-WB09KE
个人信息无误,确认可以完成测评分享计划
- 2024-08-28
-
发表了主题帖:
串联电路中的电流是否能够通过MOS分流
这是某公司的芯片应用电路,其中的散热保护电路,从理论上分析应该无法完成,手册上说明的热保护功能。
手册描述的VCC和IOUT的电压作用是否有用。
- 2024-08-26
-
回复了主题帖:
稳压管导通时“地端”电压是多少
老师好,我的分析如下:
设电源电压VCC=24V,A点的电压Va=12V,那么PMOS的G极电压就是12V,PMOS是关闭状态。RL无电流输出
设电源电压VCC=10V,A点的电压Va=GND,那么PMOS的G极电压就是GND,PMOS是开启状态。RL正常输出
是否VCC小于12V是不是电路就可以导通呢。
-
回复了主题帖:
稳压管导通时“地端”电压是多少
beyond_笑谈 发表于 2024-8-26 08:32
这个电路有问题,估计也是一个简单的示意图。忽略错误点,RL越小,设备发热。不过R3和D2已经限制了RL通过的 ...
这是一个恒流源,当电路的RL变小时对恒流源的输出压力是将输出电压变小,RL变大反而需要提高电压W=IIR,这样恒流源功率反而更大。这个电路的作用是保护恒流源。
- 2024-08-25
-
发表了主题帖:
稳压管导通时“地端”电压是多少
这是恒流源的保护电路,当电路出现过热时,电路就将进入保护状态。
1、电路出现过热时,是不是说明RL阻值较大使得设备过热。
2、电压VCC的值超D1 +12V的电压,Q1的G极电压是多少。
3、电路出现开路RL无限大,该电路是否可以保护恒流源。
- 2024-08-24
-
发表了主题帖:
运放中正反馈电容的作用
这是PWM电路通过派型滤波器转换电压的电路。转换后使用运放电压跟随后电路输出。
1、这个电路中的电容C3的作用是什么。
2、电路中的电阻R3是什么作用。
正反馈的电路相当于比较器,但是由于负反馈比较强烈,整个电路无论何时都为电压跟随器。那这个电容有什么用。
- 2024-08-21
-
发表了主题帖:
差分模拟信号是不是需要共地
模拟差分信号是不是需要信号两条线的两端需要共地
- 2024-08-20
-
发表了主题帖:
【NUCLEO H533RE】ADC差分输入测试
1、测试介绍
本测试使用STM32H533的ADC1通道的差分测试,配置和使用 ADC1 在差分模式下转换外部模拟输入,即 VinN 和 VinP 上的外部电压之差。测试除了NUCLEO H533RE开发板外还使用了过程校准仪生成测试信号,且使用开发板自带的串口打印输出测试电压。
2、硬件连接
H533RE与过程校准仪连接
H533RE PA1 ADC INP <===> PIN1 DC+
H533RE PA0 ADC INN <===> PIN2 DC-
3、参数配置
(1)系统时钟设置
系统时钟设置:外部晶振24MHZ,系统时钟为250MHZ,SysTick 时基设置为 1 毫秒。
ADC外设的时钟为64MHZ
(2) ADC 参数设置
使用ADC1外设通道CH1,模式为差分输入。分辨率为12bit,时钟分频为2分频,即64Mhz=32Mhz ADC1工作频率。STM32的ADC最高的工作频率为36Mhz,过高的频率对于采样精度有影响。
数据格式对其为:Rigth,输出数据16bit,但是高位4bit无效。
4、程序与工作原理
程序过程定义两个接收变量,差分输入除去数值还有正负反向。
/* Converted value declaration */
uint32_t uhADCxConvertedData;
/* Input voltage declaration */
int32_t uhADCxConvertedData_Voltage_mVolt;
采集过程采用查询模式进行,程序在HAL_ADC_PollForConversion()处阻塞。
/* USER CODE END WHILE */
if (HAL_ADC_PollForConversion(&hadc1, 10) != HAL_OK)
{
Error_Handler();
}
/* Read the converted value */
uhADCxConvertedData = HAL_ADC_GetValue(&hadc1);
/* Computation of ADC conversions raw data to physical values */
/* using helper macro. */
uhADCxConvertedData_Voltage_mVolt = __HAL_ADC_CALC_DIFF_DATA_TO_VOLTAGE(VDDA_APPLI,uhADCxConvertedData, ADC_RESOLUTION_12B);
printf("adc=%d \n\r",uhADCxConvertedData_Voltage_mVolt);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
使用printf()输出测量数据。
5、测试过程
(1)使用过程校准仪输出500mV和1000mV电压,但是无论怎么改变电压输出都是一个定值。而且MCU重启重启之后数值都是随机值。
1000mV重启值。
6、总结
本次测试从过程来看好像没有成功,但是无法找到任何原因。程序参考例程:ADC_DifferentialMode
该开发板的ADC的例程,前面出现过死机现象,本次测试发现ADC读取的数值异常。对于该芯片我比较看好,但是这些测试的原因请ST公司能够给与帮助。需要的详细过程可以联系楼主本人。
附录项目文件:
- 2024-08-19
-
回复了主题帖:
【NUCLEO H533RE】DAC测试与电压输出精度
本次测试出现的问题我花费的较长时间也没有找到原因,主要怀疑是stm32cubeMx的GPDMA代码,本次将STM32H563和STM32H533的配置文件打包到一起,
-
发表了主题帖:
【NUCLEO H533RE】DAC测试与电压输出精度
1、DAC测试介绍
dac输出的精度和带负载能力相互有关。本次测试使用STM32H533RE芯片集成的DAC1外设,由于NUCLEO H533RE的开发板设计原因。DAC1的通道1输出引脚PA4没有被引出来,虽然板子上面应该有空闲的接口引脚。希望ST公司在设计开发板时应该注意这一点。而且,CAN的引脚也没有引出来,SPI1的引脚也有冲突。
所以没有办法只好飞线了。通过SB3的引脚将PA4引出来。
测试的DAC负载使用20K的电阻作为负载。最大限流输出为电流0.16mA,应该不会影响芯片的精度变化。本次测试参考了同系列芯片STM32H563的“DAC_SignalsGeneration”例程。测量仪器为100M示波器。
2、硬件连接
测试负载20K欧姆电阻R,
GND <===> R 2pin
DAC PA4 <===> R 1pin
3、参数配置
(1)系统时钟设置
时钟源使用24MHZ外部晶振,系统时钟为250MHZ。
DAC外设时钟为250MHZ
时钟源使用HCLK。
(2)DAC参数设置
DAC1的输出通道为CH1,输出外设引脚为PA4,Trigger触发源:时钟TIM1触发,启用GPDMA1通道。
(3)TIM1参数设置
时钟设置为Internal clock,其它为默认,分频系数和计数都没有设置,这个我感到疑惑。
(4)GPDMA1参数设置
循环模式打开, 通道设置为Channel3,DMA源 端口:Port1,Burst:1,Data Width:byte,
目标端口为设备。Data width:word
4、程序分析与工作介绍
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] DAC Channel1 EscalatorConfig
* @param None
* @retval None
*/
static void DAC_Ch1_EscalatorConfig(void)
{
/*##-1- Initialize the DAC peripheral ######################################*/
if (HAL_DAC_Init(&hdac1) != HAL_OK)
{
/* DAC initialization Error */
Error_Handler();
}
/*##-2- Enable DAC selected channel and associated DMA ######################*/
if (HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t *)aEscalator8bit, 6, DAC_ALIGN_8B_R) != HAL_OK)
{
/* Start DMA Error */
Error_Handler();
}
}
/**
* @brief DAC Channel1 Triangle Configuration
* @param None
* @retval None
*/
static void DAC_Ch1_TriangleConfig(void)
{
/*##-1- Initialize the DAC peripheral ######################################*/
if (HAL_DAC_Init(&hdac1) != HAL_OK)
{
/* DAC initialization Error */
Error_Handler();
}
/*##-2- DAC channel2 Triangle Wave generation configuration ################*/
if (HAL_DACEx_TriangleWaveGenerate(&hdac1, DAC_CHANNEL_1, DAC_TRIANGLEAMPLITUDE_1023) != HAL_OK)
{
/* Triangle wave generation Error */
Error_Handler();
}
/*##-3- Enable DAC Channel1 ################################################*/
if (HAL_DAC_Start(&hdac1, DAC_CHANNEL_1) != HAL_OK)
{
/* Start Error */
Error_Handler();
}
/*##-4- Set DAC channel1 DHR12RD register ################################################*/
if (HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 0x100) != HAL_OK)
{
/* Setting value Error */
Error_Handler();
}
}
/**
* @brief EXTI line detection callbacks
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
/* Change the wave */
ubKeyPressed = 1;
/* Change the selected waves forms */
ubSelectedWavesForm = !ubSelectedWavesForm;
}
static void DAC_Ch1_TriangleConfig(void);定义修改触发控制
static void DAC_Ch1_EscalatorConfig(void);定义修改采样设置
/* -- Sample board code to send message over COM1 port ---- */
printf("Welcome to STM32 world !\n\r");
/* -- Sample board code to switch on leds ---- */
BSP_LED_On(LED_GREEN);
HAL_TIM_Base_Start(&htim1);
/* USER CODE END BSP */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* -- Sample board code for User push-button in interrupt mode ---- */
if (BspButtonState == BUTTON_PRESSED)
{
HAL_DAC_DeInit(&hdac1);
/* Update button state */
BspButtonState = BUTTON_RELEASED;
/* -- Sample board code to toggle leds ---- */
BSP_LED_Toggle(LED_GREEN);
/* ..... Perform your action ..... */
/* select waves forms according to the USER push-button status */
if (ubSelectedWavesForm == 1)
{
/* The triangle wave has been selected */
/* Triangle Wave generator -------------------------------------------*/
DAC_Ch1_TriangleConfig();
}
else
{
/* The escalator wave has been selected */
/* Escalator Wave generator -------------------------------------------*/
DAC_Ch1_EscalatorConfig();
}
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
主程序使用 HAL_TIM_Base_Start(&htim1);开始DAC的输出,通过按下User键控制是DMA中的const uint8_t aEscalator8bit[6] = {0x0, 0x33, 0x66, 0x99, 0xCC, 0xFF};的输出类型。
5、测试过程
测试开始将程序烧录到芯片
通过按键user改变输出,
但是输出出现了信号不稳定的现象,信号经常的丢失和跳动
6、总结
本次测试整个过程都很多不确定的地方,例如:信号除了0V时稳定,其它都不是很稳定。不会知道是不是因为设置的原因。stm32cubeMX的GPDMA设置代码无法找到设置的参数。
/**
* @brief GPDMA1 Initialization Function
* @param None
* @retval None
*/
static void MX_GPDMA1_Init(void)
{
/* USER CODE BEGIN GPDMA1_Init 0 */
/* USER CODE END GPDMA1_Init 0 */
/* Peripheral clock enable */
__HAL_RCC_GPDMA1_CLK_ENABLE();
/* GPDMA1 interrupt Init */
HAL_NVIC_SetPriority(GPDMA1_Channel3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(GPDMA1_Channel3_IRQn);
/* USER CODE BEGIN GPDMA1_Init 1 */
/* USER CODE END GPDMA1_Init 1 */
/* USER CODE BEGIN GPDMA1_Init 2 */
/* USER CODE END GPDMA1_Init 2 */
}
- 2024-08-17
-
发表了主题帖:
【NUCLEO H533RE】OLED SSD1306屏SPI接口测试
1、测试介绍
本次测试主要为NUCLEO-H533RE的SPI接口外设 Master Half-Duplex模式测试,测试验证SPI的编程流程。测试使用了0.96英寸OLED屏,驱动类型为SSD1306芯片。
SSD1306有IIC和SPI两种接口模式,本次测试使用SPI模式。NUCLEO-H533RE使用SPI 外设Master Half-Duplex模式。测试显示字符串。
2、硬件连接
主要有两个硬件
SSD1306 SPI和NUCLEO-H533RE
VCC 3.3 GND
D0 <===> PC1 MOSI
D1 <===> PC1 SCLK
RES <===> PC1 GPIO
DC <===> PA1 GPIO
3、参数配置
参数设置主要为系统时钟和SPI外设的参数。
(1) 系统设置外部24M晶振,系统时钟250Mhz,PLL2Q的时钟为4MHZ
(2)SPI时钟设置
将SPI的时钟设置为PLL2Q,即SPI4的时钟为4MHZ。
(3) SPI参数模式
SPI模式为Master Half-Duplex模式,PC1为MOSI ,PA0 SCLK。数据位8bit,速率控制为2MHZ
这里通过Prescale控制SPI的速率。过快的速度可能造成SSD1306无法工作。
(4)GPIO设置
将PB1和PA1设置为输出模式。
4、程序与工作原理
程序主要为SSD1306驱动和字体文件组成。详细代码参考附录程序
/* USER CODE BEGIN 2 */
ssd1306_Init();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
/* USER CODE END 2 */
/* Initialize leds */
BSP_LED_Init(LED_GREEN);
/* Initialize USER push-button, will be used to trigger an interrupt each time it's pressed.*/
BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
/* Initialize COM1 port (115200, 8 bits (7-bit data + 1 stop bit), no parity */
BspCOMInit.BaudRate = 115200;
BspCOMInit.WordLength = COM_WORDLENGTH_8B;
BspCOMInit.StopBits = COM_STOPBITS_1;
BspCOMInit.Parity = COM_PARITY_NONE;
BspCOMInit.HwFlowCtl = COM_HWCONTROL_NONE;
if (BSP_COM_Init(COM1, &BspCOMInit) != BSP_ERROR_NONE)
{
Error_Handler();
}
/* USER CODE BEGIN BSP */
/* -- Sample board code to send message over COM1 port ---- */
printf("Welcome to STM32 world !\n\r");
// ssd1306_SetCursor(0, 0);
// ssd1306_WriteString(title, Font_11x18, White);
// ssd1306_UpdateScreen();
/* -- Sample board code to switch on leds ---- */
BSP_LED_On(LED_GREEN);
/* USER CODE END BSP */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* -- Sample board code for User push-button in interrupt mode ---- */
if (BspButtonState == BUTTON_PRESSED)
{
/* Update button state */
BspButtonState = BUTTON_RELEASED;
/* -- Sample board code to toggle leds ---- */
BSP_LED_Toggle(LED_GREEN);
/* ..... Perform your action ..... */
}
ssd1306_SetCursor(0, 0);
ssd1306_WriteString(timerStr, Font_11x18, White);
ssd1306_UpdateScreen();
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
5、测试过程
烧写程序运行
附录:项目文件
-
回复了主题帖:
【NUCLEO H533RE】CAN FD功能和通讯测试
失败原因已经找到了
没想到,正坑啊
这个PA11和PA12为USB的接口,根本没有和CH10连接。