标签: stm32f1

如何在 CubeMX STM32 中使用 LL(低级)驱动程序?

我正在使用 STM32CubeMX 为 STM32F103 微控制器创建一个空白项目。使用 HAL 驱动程序(默认),我得到了一个快速运行的闪烁示例,但我想尝试使用 LL(低级)驱动程序而不是 HAL。

当我转到 CubeMX 中的项目 > 设置 > 高级设置时,我看到列出的外围设备,并且每个外围设备旁边都有一个下拉菜单,其中只有一个选项,HAL。根据文档,这是我可以为每个外围设备选择 LL 或 HAL 的地方。

如何在 STM32CubeMX 中启用 LL 驱动程序?

详细信息:我在 Ubuntu (16.04) 上全新安装了 STM32CubeMX (4.23.0) 并为 STM32F103C8 微控制器创建了一个新项目(这是在“Blue Pill”板上)。我正在使用 SW4STM32 IDE,除了我必须在配置文件中选择 STLink V2 而不是 V2.1 之外,一切都或多或少都是开箱即用的。

hal stm32 cubemx stm32f1

11
推荐指数
2
解决办法
2万
查看次数

在 Master (SPI) 中设置 nss_soft

我想使用 Nucleo STM32F103RB 在 master 中将 NSS 引脚设置为软件模式。但我有一些问题?

在参考手册中,他们说,

在 NSS 软件模式下,设置 SPI_CR1 寄存器中的 SSM 和 SSI 位。如果在输出模式下需要 NSS 引脚,则只应设置 SSOE 位。

现在,

为什么我们需要用 SSM 设置 SSI 位?

SSOE 位的目的是什么?

arm spi stm32 master-slave stm32f1

4
推荐指数
1
解决办法
1881
查看次数

点亮STM32F103C8T6上的LED

我正在试灯STM32F103C8T6上的LED指示灯(在端口c,针脚13上)。我没有使用IDE。码:

#include "include/stm32f10x.h"

int main()
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

    GPIOC->CRH  &= ~GPIO_CRH_CNF13;
    GPIOC->CRH  |=  GPIO_CRH_MODE13_0;

    GPIOC->BSRR  = GPIO_BSRR_BR13;

    while(1)
    {
        GPIOC->BSRR = GPIO_BSRR_BS13;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在包含目录中包含文件的链接:

system_stm32f10x.h

core_cmInstr.h

core_cmFunc.h

core_cm3.h

stm32f10x.h第1部分

stm32f10x.h第2部分

我就是这样编译的

arm-none-eabi-gcc --specs=nosys.specs -o output led.c

将其上传到mc后,什么也没有发生。

c embedded arm stm32 stm32f1

3
推荐指数
1
解决办法
996
查看次数

ST LINK 错误 (DEV_TARGET_HELD_UNDER_RESET)

所以我使用的是 STM32F103C8T6 板,几天前它工作正常,但后来尝试使用 keil 视觉编译器加载代码,它显示此消息 STLINK Error(DEV_TARGET_HELD_UNDER_RESET)。之后使用STM32CubeProgrammer也显示同样的问题,仅与“热插拔”模式连接, 如您在此处看到的

它显然是一个重置错误,但我真的不知道它是如何发生的,并且在互联网上找不到太多有关此问题的资源,现在我无法在我的 stm32f103 板上下载任何代码,它显示 此消息

在网上研究后发现可能是焊接问题,但我不认为是这样,我只使用微控制器,而不是任何面包板电路,几天前就完全没问题了。我的所有写入和读取保护复选框在 STM32CubeProgrammer 部分中也未选中。

我在 stcommunity 上的家伙刚刚说“他检查了所有 CPU 引脚,主板开始工作。” 但这是引脚重置的问题吗?在STM32F103C8T6板中,它有一个重置按钮,但如何查找其中的问题?

reset stm32 stm32f1

3
推荐指数
1
解决办法
1万
查看次数

STM32μC:SysTick延迟在中断处理程序中不起作用

所以我STM32F103C8T6用C语言编写了一个微控制器程序,使用RTC(实时时钟)和显示模块.

RTC和显示都工作正常,但是当我尝试从RTC中断处理程序内部更新显示时,它不起作用.

当我从内部向显示器写东西时main(),它工作得很好.

中断处理程序也可以工作,所以我认为问题在写入显示的函数中.

此功能使用小延迟来与显示控制器进行通信.

我以前使用SysTick过来生成这样的延迟:

void delay(uint32_t n){
    uint32_t start =  systick_count;
    while (systick_count - start < n);
    return;
}
Run Code Online (Sandbox Code Playgroud)

但不知何故,在RTC的中断处理程序中,它不起作用.所以我用这个替换了我的延迟函数,而不是使用SysTick:

for (; i>0; i--) {
    for (int j = 0; j < 72; ++j) {
        __asm__ __volatile__("nop\n\t":::"memory");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在一切正常.

我试图理解,为什么SysTick显然在RTC中断处理程序内不起作用.

我想这可能是由中断优先级引起的,但根据数据表,默认情况下,SysTick Interrupt优先级高于RTC中断优先级.

也许有人可以解释,为什么会这样?

编辑1:好的,所以我已经阅读了更多关于中断优先级的内容,似乎我需要正确配置NVIC_IRQChannelPreemptionPriority.我会尽快尝试这个...

关于中断内部的延迟,我知道这不是正确的方法,但我仍然想了解程序的行为

EDIT2:我刚刚尝试通过以下方式更改中断优先级:

// set RTC interrupt priority to 15 (lowest)
NVIC_SetPriority(RTC_IRQn, 15);
// set interrupt priority of SysTick to 0 (highest)
NVIC_SetPriority(SysTick_IRQn, 0); …
Run Code Online (Sandbox Code Playgroud)

c microcontroller stm32 stm32f1

1
推荐指数
1
解决办法
782
查看次数

标签 统计

stm32 ×5

stm32f1 ×5

arm ×2

c ×2

cubemx ×1

embedded ×1

hal ×1

master-slave ×1

microcontroller ×1

reset ×1

spi ×1