2

我是 STM32 的新手,我按照此处的说明在 Ubuntu 中编程我的第一个 stm32f103c8t6 板。

这是我添加到源代码中的代码:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
   HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);
   HAL_Delay(500);

  }
  /* USER CODE END 3 */

}

当然,我已经将PA0端口设置GPIO_outputSTM32CubeMX. 这是函数的输出MX_GPIO_Init

static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);

  /*Configure GPIO pin : PA0 */
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

代码成功构建并上传到开发板。以下是用于重建构建和上传代码的代码的输出:

-------------- Clean: Release in sample1 (compiler: GNU GCC Compiler for ARM)---------------

Executing clean command: make -f Makefile cleanRelease
rm -fR .dep build
Cleaned "sample1 - Release"

-------------- Build: Release in sample1 (compiler: GNU GCC Compiler for ARM)---------------

Checking if target is up-to-date: make -q -f Makefile Release
Running command: make -f Makefile Release
mkdir -p build      
C. Compiling build/system_stm32f1xx.o...
C. Compiling build/stm32f1xx_hal.o...
C. Compiling build/stm32f1xx_hal_cortex.o...
C. Compiling build/stm32f1xx_hal_dma.o...
C. Compiling build/stm32f1xx_hal_flash.o...
C. Compiling build/stm32f1xx_hal_flash_ex.o...
C. Compiling build/stm32f1xx_hal_gpio.o...
C. Compiling build/stm32f1xx_hal_gpio_ex.o...
C. Compiling build/stm32f1xx_hal_pwr.o...
C. Compiling build/stm32f1xx_hal_rcc.o...
C. Compiling build/stm32f1xx_hal_rcc_ex.o...
C. Compiling build/stm32f1xx_hal_tim.o...
C. Compiling build/stm32f1xx_hal_tim_ex.o...
C. Compiling build/main.o...
C. Compiling build/stm32f1xx_hal_msp.o...
C. Compiling build/stm32f1xx_it.o...
S. Compiling build/startup_stm32f103xb.o...
2018-06-21T10:32:46 INFO usb.c: -- exit_dfu_mode
C. Linking build/sample1.elf...
/usr/bin/arm-none-eabi-size build/sample1.elf
   text    data     bss     dec     hex filename
   3560      20    1572    5152    1420 build/sample1.elf
H. Linking build/sample1.hex...
B. Building build/sample1.bin...
Used gcc: 6.3.1
/usr/local/bin/st-flash erase
2018-06-21T10:32:46 INFO common.c: Loading device parameters....
2018-06-21T10:32:46 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-06-21T10:32:46 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2018-06-21T10:32:46 INFO common.c: Loading device parameters....
2018-06-21T10:32:46 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2018-06-21T10:32:46 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
st-flash 1.4.0-39-g6db0fc2
Mass erasing
/usr/local/bin/st-flash --reset write build/sample1.bin 0x8000000
2018-06-21T10:32:46 INFO common.c: Attempting to write 3580 (0xdfc) bytes to stm32 address: 134217728 (0x8000000)
st-flash 1.4.0-39-g6db0fc2
Flash page at addr: 0x08000000 erased
Flash page at addr: 0x08000400 erased
Flash page at addr: 0x08000800 erased
2018-06-21T10:32:46 INFO common.c: Finished erasing 4 pages of 1024 (0x400) bytes
2018-06-21T10:32:46 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2018-06-21T10:32:46 INFO flash_loader.c: Successfully loaded flash loader in sram
Flash page at addr: 0x08000c00 erased
  1/4 pages written
  2/4 pages written
2018-06-21T10:32:46 INFO common.c: Starting verification of write complete
2018-06-21T10:32:46 INFO common.c: Flash written and verified! jolly good!
  3/4 pages written
  4/4 pages written
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 0 warning(s) (0 minute(s), 1 second(s))

但是,LED 没有按预期开始闪烁。当我将它连接到 5 伏时,LED 工作正常。我用 AVO 表检查了电路板的引脚,它们都连接到微控制器。

经过一些研究,我认为它必须与Boot0和引脚有关,所以我从这里Boot1尝试了不同的选项,但没有一个有效。

这是我的董事会的形象:

我该如何解决?

4

4 回答 4

2

我相信 HAL_Delay 函数使用 systick 以毫秒为单位计算时间,必须将 systick 设置为 1ms 才能获得正确的延迟,你配置了吗?我不确定你是怎么做到的。

如果输出切换之间的时间非常短,则输出不会切换,因为您设置了 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_ LOW ;,尝试 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_ VERY_HIGH ; 然后您可以使用示波器检查它是否切换。

如果您手头没有示波器,您可以尝试插入一个“while 循环”计数到一个高数,而不是 HAL_Delay 函数。

Counter=0;            
while (Counter<500000000)
  {
  Counter++;
  }

假设您的时钟频率设置为 72MHz,这将给出 0.5 到 1 秒范围内的时间。请记住将变量声明为 32 位或更高的整数,例如 uint32_t counter = 0; 如果它不起作用,请在 HAL_GPIO_Togglepin 行设置断点,然后它将在断点行暂停,每次单击“RUN”时,它应该再次运行到断点并且输出应该切换。

于 2018-06-22T11:06:26.293 回答
1

我一个星期都在处理同样的问题。使用 stm32f103c8t6 在 arduino 环境中闪烁 LED 二极管的简单程序正在运行,stm32f103c8t6、stm32CubeMX、ubuntu 的 gcc-arm(gcc-arm-none-eabi 版本:15:6.3.1+svn253039-1build1)和 ubuntu 的组合18.04 没有。在我为 Arm 安装了GNU Embedded Toolchain之后,事情就开始起作用了。GNU Arm Embedded Toolchain Version 8-2018-q4-major Linux 64解决了我的问题。

于 2019-01-07T05:48:02.757 回答
0

您的代码应该可以工作,但您只是切换一个未连接的 µC 引脚。

如果您查看“黑色药丸”主页的原理图,LED 连接到 PB12

在此处输入图像描述

如果要运行固件(从闪存),则 BOOT0 引脚应连接到 GND,BOOT1 引脚无关紧要。

图像中的一件事:您的 LED 没有电阻器来限制电流,这取决于 LED 类型,这可能会损坏 LED 和/或 µC 引脚。

也许您应该首先尝试使用板上的 D2,如果可行,您可以切换到打开的 LED。

我不知道您是否对引脚进行了正确的初始化:

PB12 设置

GPIO_InitTypeDef GPIO_InitStruct;

/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOB_CLK_ENABLE();

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);

/*Configure GPIO pin : PB12 */
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

时钟使能对于每个外设都非常重要。

于 2018-06-21T10:10:10.297 回答
0

我有同样的问题,我通过将 BOOT0 引脚连接到地来解决这个问题......

于 2021-11-11T16:50:56.300 回答