stm32 相关问题

STM32是ST Microelectronics的一系列微控制器,基于Cortex M0,M0 +,M3,M4或M7 ARM内核(取决于产品系列)。

STM32 SPI RXNE 标志不会改变

我在 Nucleo 板上使用 STM32F303RE 微控制器。 数据表 参考手册 在尝试编写一个与 SPI 设备通信的程序后,我发现它不起作用,所以我剥离了 c...

回答 2 投票 0

如何仅使用软件重新初始化STM32微控制器中的USB枚举?

我正在开发一个USB Msc项目,需要不同的USB棒才能连接到stm32f429。我正在使用 HAL 库。 某些 USB 记忆棒需要重新启动或重新枚举文件...

回答 1 投票 0

STM32 PWM 生成

我需要以20ms的周期和50Hz的频率生成PWM。 生成的 PWM 的脉冲宽度(占空比)应在 1.5 至 2ms 之间 我正在使用 STM32f103c8t6 mcu 和我的 APB2 外设...

回答 1 投票 0

STM32板被认可为大容量存储设备

我正在尝试对 STM32F407VET6 板进行编程,它在设备管理器中被识别为大容量存储设备。我尝试将驱动程序更改为 libusb-win32,但现在看起来像这样: 之前和之后

回答 1 投票 0

NUCLEO-H723ZG Printf (SWV) 无法在 STM32CubeIDE 上工作

尝试了解 ITM 和 SWV 以便使用有用的 printf 函数进行调试是非常值得的。但它不适用于 ST 的最新主板之一 NUCLEO-H723ZG。这是一个...

回答 2 投票 0

ARM GCC 链接器脚本,用于在 RAM 中启动时初始化 .data 部分

虽然我的问题涉及STM32的ARM GCC编译和链接,但它更直接与GCC链接器脚本的正确编写相关。 我有以下链接器脚本...

回答 1 投票 0

如何在stm32 spi Trasmit结束后始终将MOSI引脚拉低

如果 SPI 传输期间 MOSI 数据的最后一位为高电平,则下一个信号将继续为高电平。有什么办法让它在SPI传输后变低吗?

回答 1 投票 0

使用寄存器的STM32F401xx I2C驱动程序

我想在proteus中使用两个STM32F401xx MCU。其一为主人,其二为奴隶。 这是我给主人的代码: 使用(MicroC Pro For Arm)程序。 #包括 我想在STM32F401xx MCU中使用两个proteus。其中一个是成为 master,另一个是成为 slave。 这是我给大师的代码: 使用 (MicroC Pro For Arm) 程序。 #include <stdint.h> #include <stdio.h> uint8_t temp=0; void begin(uint8_t addr); void end(void); void Write (uint8_t dat); void main() { // Enable the I2C CLOCK and GPIO CLOCK RCC_APB1ENR |= (1<<21); // enable I2C CLOCK RCC_AHB1ENR |= (1<<1); // Enable GPIOB CLOCK // Configure the I2C PINs for ALternate Functions //PB8 and PB9 are connected to I2C1_SCL and I2C1_SDA GPIOB_MODER |= (2<<16) | (2<<18); GPIOB_OTYPER |= (1<<8) | (1<<9); GPIOB_OSPEEDR |= (3<<16) | (3<<18); GPIOB_PUPDR |= (1<<16) | (1<<18); GPIOB_AFRH |= (4<<0) | (4<<4); begin(0x08); Write(0x01); end(); } void begin(uint8_t addr){ //join I2C as a master mode //Generate a start condition I2C1_CR1 |= (1<<10); // Enable the ACK I2C1_CR1 |= (1<<8); // Generate START while (!(I2C1_SR1 & (1<<0))); // Wait for SB bit to set to 1 //Send the Slave Address to the DR Register I2C1_DR = addr; // send the address while (!(I2C1_SR1 & (1<<1))); // temp = I2C1_SR1 | I2C1_SR2; // read SR1 and SR2 to clear the ADDR bit // Reset the I2C I2C1_CR1 |= (1<<15); //I2C Peripheral under reset state -->page.493 manual I2C1_CR1 &= ~(1<<15); //I2C Peripheral not under reset -->page.493 manual // Program the peripheral input clock in I2C_CR2 Register in order to generate correct timings I2C1_CR2 |= (42 <<0); // PCLK1 FREQUENCY in MHz I2C1_CCR = 210<<0; // Configure the clock control registers I2C1_TRISE = 43; // Configure the rise time register I2C1_CR1 |= (1<<0); // Enable I2C } void end(void) { I2C1_CR1 |= (1<<9);//stop generation // Wait until the STOP condition is complete while (I2C1_SR2 & (1<<0)); //Cleared by hardware after detecting a Stop condition on the bus // Clear the STOP bit I2C1_CR1 &= ~(1<<9); } void Write (uint8_t dat) { while (!(I2C1_SR1 & (1<<7))); // wait for TXE bit to set I2C1_DR = dat ; // wait for BTF bit to set while (!(I2C1_SR1 & (1<<2))); //waiting while BTF=0 but when BTF=1; Data byte transfer succeeded } 从机代码: #include <stdint.h> #include <stdio.h> uint8_t temp=0; uint8_t state =0x00; void begin(uint8_t addr); void end(void); uint8_t Read (); void main() { RCC_APB1ENR |= (1<<21); // enable I2C CLOCK - RCC_AHB1ENR |= (1<<1); // Enable GPIOB CLOCK RCC_AHB1ENR |= (1<<0); // Enable GPIOA CLOCK GPIOA_MODER |=(1<<0); //set pin 0 as output // Configure the I2C PINs for ALternate Functions //PB8 and PB9 are connected to I2C1_SCL and I2C1_SDA GPIOB_MODER |= (2<<16) | (2<<18); GPIOB_OTYPER |= (1<<8) | (1<<9); GPIOB_OSPEEDR |= (3<<16) | (3<<18); GPIOB_PUPDR |= (1<<16) | (1<<18); GPIOB_AFRH |= (4<<0) | (4<<4); begin(0x08); state = Read(); end(); if (state == 0x01){ GPIOA_ODR |=(1<<0);//set 1 for pin 0 } } void begin(uint8_t addr){ //join I2C bus as a slave mode I2C1_CR2 |= (42<<0); // PCLK1 FREQUENCY in MHz I2C1_OAR1 = addr;//own address interface I2C1_CR1 |= (1<<0); // Enable I2C I2C1_CR1 |= (1<<10); // Enable the ACK ,indicate that a byte is received } void end(void) { I2C1_CR1 |= (1<<9);//stop generation // Wait until the STOP condition is complete while (I2C1_SR2 & (1<<0)); //Cleared by hardware after detecting a Stop condition on the bus // Clear the STOP bit I2C1_CR1 &= ~(1<<9); } uint8_t Read (){ uint8_t receivedData = 0; I2C1_CR1 &= ~(1<<10); // clear the ACK bit temp = I2C1_SR1 | I2C1_SR2; // read SR1 and SR2 to clear the ADDR bit.... EV6 condition I2C1_CR1 |= (1<<9); // Stop I2C while (!(I2C1_SR1 & (1<<6))); // wait for RxNE to set receivedData = I2C1_DR; // Read the data from the DATA REGISTER return receivedData; } 我尝试在Proteus上进行模拟,但是没有什么可以改变的,led still off。所以,我想知道如何在Proteus上制作simulation,如果我提供的代码有任何问题,我按照STM32F401xx的datasheet和manual来编写这个简单的驱动程序。 proteus 两个 STM32F401xx MCU 的连接: 你的主人的“开始”功能做了一些奇怪的事情。 I2C1_TRISE = 43; after 设置起始位怎么样?您在配置之前尝试使用 I2C。在使用任何应答或起始位之前,TRISE 必须是对 I2C 执行的首要操作之一。整个函数以奇怪的顺序执行操作。 寄存器中的“起始位”不启用起始位功能。当您写入时,它实际上会尝试立即发送一个起始位,并且在您的代码中,它会在您设置 TRISE 之前甚至在启用 I2C 外设之前发生。因此,行为是不可预测的。 我检查了F401的外设,它与F103的外设一模一样,只是F401多了一个用于模拟和数字噪声滤波器控制的寄存器。除此之外,它们是相同的并且完美地映射到另一个。 (根据勘误表,F401 不存在与 F103 相同的带有滤波器故障的硅缺陷)。 以下是我使用该外设的操作顺序,跳过了明显的 GPIO 备用功能设置,因此此处仅注册 I2C。这是 I2C 主设备配置,但一般设置是相同的,从设备配置和主设备配置之间的区别在于以下必要步骤: 配置GPIO,使能I2C时钟。 将CR2中的FREQ配置为APBx时钟频率(例如STM32运行在64MHz时为32,因为I2C的APBx运行在32000000Hz) 在CCR中配置时钟周期倍频器 配置 TRISE 的上升/下降时间 现在,如果您写入起始位,您可以将数据加载到 DR 并将其作为主设备发送。到目前为止,您不需要向 Start 位写入任何内容,也不需要向 ACK 位写入任何内容,这些位用于正在进行的通信,而不是用于配置。 对于从机,您可以进行类似的设置,但显然还需要配置其从机地址。 我觉得你太着急了。从主 MCU 开始,确保您首先可以在 I2C 线路上看到一些内容。

回答 1 投票 0

在STM32CubeIDE中通过标准CAN总线发送超过8个字节

我想通过 STM32CudeIDE 中的标准 CAN 总线发送超过 8 个字节,但我不知道该怎么做:我正在发送三个浮点值,其中每个浮点为 4 个字节。前两个

回答 1 投票 0

计算 RTOS 应用程序中的堆栈使用情况

我目前正在开展一个项目,使用 RTOS (micrium) 在 STM32 微控制器中开发应用程序。 是否有任何工具可以计算 RTOS 应用程序中特定线程的堆栈使用情况...

回答 2 投票 0

使用定时器更新中断时,while 循环不起作用

我使用的是 stm32g030f6 微控制器,我想每 1 秒切换一次 LED。 这是我的代码 #include“main.h” uint8_t cnt = 0; 布尔发送=假; HAL_UART_RxCpltCallback(

回答 1 投票 0

FreeRTOS 的 StreamBuffer 未启动

Freertos StreamBuffer 似乎在我使用以下命令创建它时挂起: StreamBufferHandle = xStreamBufferCreate(3,10); IM 使用 stm32h743 mcu 和 CubeMX 在 KEIL uvision 编译器中生成的代码。 我...

回答 1 投票 0

stm32 C 全局变量没有初始化值

正在开发一块EVAL板stm32G474RE,其闪存为512K,RAM为128K。 EVAL 板上一切正常。现在我们收到了实际的硬件,这是一个stm32g474CBU。非常...

回答 1 投票 0

如何在stm32中使用外部adc输出读取16位并行数据

我在 stm32f4 中使用外部 adc 输出连续读取 16 位并行数据时遇到问题 我在用着 GPIOA->IDR 16位数据如何存储在IDR中 以及如何访问输入数据寄存器

回答 1 投票 0

CS32F103C8T6 蓝色药丸克隆 - 无法从 AC6 SystemWorkbench 进行刷新

我正在尝试使用 AC6 SystemWorkBench 和 ST-LINK v2 设备来刷新带有 CS32F103C8T6 芯片的蓝色药丸克隆。这是一个由 STM32CubeMX 构建的项目 - 我使用的是 MacOS Mojave 机器。他...

回答 4 投票 0

STM32 HAL_CRC 16 位

我尝试在我的STM32L4上使用HAL_CRC来计算16位CRC,但不知何故,无论输入是什么,我总是得到相同的结果...... CRC 初始化 hcrc.Instance = CRC; hcrc.Init.CRCLen...

回答 2 投票 0

执行MI命令失败:目标远程本地主机:61234

我尝试在STM32L552ZET6Q MCU上运行程序。我使用STM32CubeIDE来编写程序,ST-LINK(ST-LINK GDB服务器)作为调试探针和SWD接口。 我成功编译了程序,但是同时

回答 4 投票 0

STM32 HAL_UART_Transmit_IT()有助于节省CPU时间吗?

HAL_UART_Receive_IT() 有助于节省 CPU 时间。 HAL_UART_Transmit_IT()怎么样? HAL_UART_Transmit_IT() 是否有助于节省 CPU 时间? 阻塞模式下的 UART 传输和 Interr... 之间有什么区别

回答 1 投票 0

UVC MJPEG 流 - 是否可以从 USB UVC 流中提取 jpeg 图像?

我正在使用某人编写的 STM32 微控制器代码库来从 HDMI 到 USB 接口读取 UVC 数据。我能够收集图像数据并将其设置为 MJPEG 格式,但无法获取

回答 2 投票 0

C 程序初始化闪存并检测其已初始化

我想将外部闪存中的一些值保存到微控制器中。每次运行程序时,这些值通常都会增加。我想将它们初始化为0。 之前...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.