标签: microcontroller

我可以在评估板(嵌入式编程)上从SD存储器而不是闪存运行程序吗?

我有一个评估板(Olimex STM32-P103),它支持SD卡连接器.我想将我的程序放入SD存储器而不是微控制器的内部闪存; 并从那里运行它.根据boot-loader问题,我不知道是否可以这样做!

PS我的目标是在这块板上运行linux,然后将我的应用程序移植到它上面.

c embedded microcontroller embedded-linux bootloader

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

应该指针在c中签名或未签名

我有get_picture()一个拍照的功能.它返回一个类型为uint8_t的指针(存储pciture的位置),并获取一个指向存储图片长度的变量的指针.

这是宣言:

uint8_t * get_picture(int *piclength)
Run Code Online (Sandbox Code Playgroud)

在这里我称之为main():

unsigned int address, value;
address = (unsigned int)get_picture((int*)& value);
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 因为address我实际上应该将它定义为一个地址(这是正面的)int.

c int microcontroller

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

如何实现两次按钮中断PIC

我正在使用 16F1703 PIC mcu,我想通过触摸按钮(A1)开始一个 7 段液晶循环(0-9)循环,之后如果我触摸按钮(A1)两次,我想要图片进入睡眠模式。

为此,我实现了这个:

#include <test_interrupt.h>
byte const DataExit[10]={0b01000100,
                               0b01011111,  
                               0b01100010,
                               0b01001010,
                               0b01011001,
                               0b11001000,
                               0b11000000,
                               0b01011110,
                               0b01000000,
                               0b01001000};
byte const bitMask[8]={1,2,4,8,16,32,64,128};

//show seven numbers
void segmentCycle(void){
   int i, j; 
   for(i=0;i<10;i++){
         for (j=0; j<8;j++){
            output_low(CLK);
            output_bit(DATA,DataExit[i] & bitMask[j]);
            output_high(CLK);  
         }

         delay_ms(7000);
         output_low(CLR);
         delay_ms(6000);
         output_high(CLR); 
   }
}

#INT_IOC
void  IOC_isr(void) 
{
  segmentCycle(); 
  sleep(); 

}

void main()
{
   port_a_pullups(0x02);
   enable_interrupts(INT_IOC_A1);
   enable_interrupts(INT_IOC_A1_H2L);
   enable_interrupts(GLOBAL);

   while(TRUE);

}
Run Code Online (Sandbox Code Playgroud)

现在,如果我触摸按钮,有时它会启动,否则不会。你有什么建议?

我正在使用 ccs 编译器。

c embedded microcontroller interrupt pic

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

按下两个按钮时试图让电机停止

我正在研究一个项目,它有两个按钮,每个按钮通过H桥将电机转向一个方向(时钟/反时钟),但是当我点击两个按钮时,我试图让电机停止按按钮.一切都工作正常,但我不能得到两个按钮部分...

这是我的尝试:

#include "motor.h"
#include <avr/io.h>
#include <util/delay.h>
int flag=0;

int main(void)
{
    DDRD &= ~(1<<PD2);
    DDRD &= ~(1<<PD3);
    DDRB |= (1<<PB0);
    DDRB |= (1<<PB1);
    PORTB &= ~(1<<PB0);
    PORTB &= ~(1<<PB1);

    while(1)
    {
        if (PIND & (1<<PD2))
        {
            flag = 1;
        }           
        else if (PIND & (1<<PD3))
        {
            flag = 2;
        }           
        else if (PIND & (1<<PD3 ) && (1<<PD2))
        {
            flag = 3;
        }

        switch (flag)
        {
            case 1:
                 DC_MOTOR_PORT |= (1<<DC_MOTOR_PIN1);
                 DC_MOTOR_PORT &= ~(1<<DC_MOTOR_PIN2);
                 break;

            case 2:
                 DC_MOTOR_PORT …
Run Code Online (Sandbox Code Playgroud)

c embedded microcontroller avr

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

尝试在无头模式下构建我的项目,但收到警告:没有匹配的项目

我在 STM32CubeIDE 中有一个项目,我使用以下命令在无头模式下从命令行运行该项目:

headless-bat -project "my-project-name/Debug" -build

并且构建成功。但是,当我尝试将同一项目复制到另一个目录并尝试运行它时,我收到此错误警告:没有与我用它编写的项目名称匹配的项目。我将项目复制到 c:/myworkplace,然后运行以下命令:

headless-bat -project "my-project-name/Debug" -workplace "c:\myworkplace" -build

但我收到了上面提到的错误。有人有什么主意吗?

microcontroller stm32 stm32cubemx

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

在I2C总线中,从设备如何知道数据是否属于它们

我有一个微控制器和 4 个从设备连接到微控制器 I2C 总线。我对从 I2C 总线读取数据有一个疑问。当主机启动任何传输时,它会在 I2C 总线上写入设备地址,但我想知道从设备将如何在 I2C 总线中识别,数据是否属于它们。

microcontroller i2c

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

串行控制台通信如何在微控制器中工作?

我的疑问是关于通信的物理层,我从实践中知道,例如使用 teraterm 与 MCU 通信只是启用和配置 UART 外设,然后通过 USB 连接微控制器和瞧。

但对我来说,如果 USB 连接到 DN 和 DP,而 UART 使用 RX 和 TX,主机如何有效地与微控制器通信,这对我来说还没有意义?

c embedded microcontroller arm uart

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

检测上升和下降温度C

我正在尝试使用 PIC16F877A MCU 和两个 DS8B20 传感器检测上升和下降的温度。当我尝试检测温度下降时,我遇到了问题。这是我的代码我想做什么:

#include "main.h"

void main() {

    //Turn on LCD backlight
    output_high(PIN_D7);

    // Initialize LCD module
    lcd_init();

    float Threshold_Value = 30;  // Temperature threshold value

    while (TRUE) {

        Show_User_Info();
        delay_ms(10);
        Read_Sensors();

        // Starting to read user button values
        User_Buttons();
        delay_ms(20);               // Minimum amount of time to read user button  values

        // Starting to compare user set temperature value and upper sensor temperature  read value.
        Compare_Upper_Temp();
        delay_ms(20);

        //================================

        // Checking, if the MCU pin connected to pump …
Run Code Online (Sandbox Code Playgroud)

c microcontroller temperature

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

使用基本的嵌入式系统 API

我正在尝试借助在线资源来学习嵌入式系统,但我发现这非常困难。我对如何使用自动生成的 API 有一些疑问?我在 stm32cubeIDE 上使用 nucleo-f446re 开发板。在经历了很多在线讲座之后,例如我能够理解,如果我必须初始化一个 GPIO 引脚,我必须使用以下代码序列,如下所示:

int main(void)
{
    HAL_Init();
    SystemClockConfig();
    GPIO_Init();                              // High Level GPIO Initialization
    while(1);
    

    return 0;
}    

void GPIO_Init(void)
{
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitTypeDef ledgpio;
    ledgpio.Pin = GPIO_PIN_5;
    ledgpio.Mode = GPIO_MODE_OUTPUT_PP;
    ledgpio.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA,&ledgpio);
}
 void SystemClockConfig(void)
{
  
}
Run Code Online (Sandbox Code Playgroud)

如GPIO_Init函数所示,使用了一系列API和Handler函数。我的问题是我应该继续记住使用的 API 和处理程序的顺序,并为其他外设(如定时器、Uart、CAN、PWM 等)做类似的事情,还是有其他方法?另外,如果我使用其他一些微控制器,用于上述同一事物的 API 的顺序是否会相似或有很大不同?请指导。

c embedded microcontroller

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

CMSIS &amp; STM32,如何开始?

我想在 STM32 上使用 CMSIS 启动项目。网上一搜,没找到具体的教程。有些使用 SPL 开始项目(ST 已停止使用)。我想要一个在 stm32cube 上学习 CMSIS 的资源。

如果有人帮助我,我会很高兴。

问候

microcontroller stm32 cmsis

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