Tag: 嵌入式

STM32CubeF7 BSP LCD尝试

我正在尝试使用STM32CubeF7的BSP库在stm32f769i-disco的LED上显示一个字符串。 然而,没有任何反应。 这是代码: #include “stm32f7xx_hal.h” #include “stm32f769i_discovery.h” #include “stm32f769i_discovery_lcd.h” #include “stm32f7xx.h” #include char str[] = “Hello from BSP LCD demo!”; void LCDInit() { // Initialize the LCD using the BSP_LCD_Init() function. BSP_LCD_Init(); // Select the LCD layer to be used using the BSP_LCD_SelectLayer() function. //BSP_LCD_SelectLayer(0); BSP_LCD_LayerDefaultInit(LTDC_DEFAULT_ACTIVE_LAYER, LCD_FB_START_ADDRESS); BSP_LCD_SelectLayer(LTDC_DEFAULT_ACTIVE_LAYER); // Enable the LCD display using the […]

环回模式启用?

我希望使用omap4的uart4实例的应用程序代码来测试软件循环。我正在使用默认驱动程序。 我将如何使用ioctl?或任何其他方式。 请在此处找到驱动程序代码omap-serial.c 。 请分享任何参考代码。

用C语言写入STM32L4x1闪存

我试图在Windows 7上使用JTAG ST-Link / V2在STM32L476的闪存中写入。不需要上传软件,我只需要在非易失性地方写入数据,可以读取和删除它。 作为一个关于硬件的新手,只有在编写非嵌入式常规C时才有效,恐怕我可能会伤害或修改不可逆转的闪存。 此外,我不确定我能做什么或不能做什么。 我已经想到阅读手册 ,写入0x08000000内存位置似乎是一个好主意。 使用C代码调用ST-Link_Utility : const char CMD_ACCESS_ST_UTILITY[] = “cd C:/Program Files (x86)/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility&&ST-LINK_CLI.exe “; bool STLINKWriteSystemCalls(void) { char cmd[200] = “”; strcpy(cmd, CMD_ACCESS_ST_UTILITY); // cmd to access utility strcat(cmd, “-c”); // Then connect with ST-Link if (system(cmd) != 0) return false; // If failed exit strcpy(cmd, […]

如何从double中分隔数字并将它们存储为C中的int?

说我有一个双如下: double aDouble = 15.6; 我想将它转换为三个int,如下所示: int x = 1; int y = 5; int z = 6; 我该怎么做呢?

在Linux中断处理程序中创建一个小延迟

我正在与硬件设计小组合作开发一个中断处理程序,我们正试图弄清楚bug的位置。 我正在以5khz的速度读取SPI总线上的芯片。 芯片加载4个字节并触发数据就绪引脚。 我的中断处理程序唤醒并从SPI总线读取4个字节并将数据存储在缓冲区中。 但奇怪的是,每17次读取都会给出所有0的4个字节,这是不对的。 我们正在探索的一个选项是,当芯片发送数据就绪信号时,它并不总是准备就绪。 所以,我知道我无法在中断处理程序中睡觉,但我想尝试引入10或20微秒的延迟。 现在我有一个计数到100,000的for循环然后处理中断。 我没有看到任何变化,所以我想我可能会看到有人有更好的技术来忙碌等待。 或者至少是一种更好的方法来确定我应该经历多少循环迭代,因为我不确定这需要多长时间,或者编译器是否只是优化了整个事情。

sprintf在IAR微控制器中破坏arrays

我目前正在学习嵌入式编程,因此使用带有ARM架构的TI微控制器在IAR平台上工作。 由于我完全不熟悉与此类编程或C编程相关的技术,我想问一个基本问题: 我有以下简单的代码片段: int i; for(i = 0; i < NUM_SAMPLES; i++) { sinTable[i] = sinf(2*i*dT*PI); } for(i = 0; i < NUM_SAMPLES; i++) { char out[32]; sprintf(out,"sin: %.7f, %.7f;", i*dT, sinTable[i]); putString(out); delay(DELAY_100US); } 其中sinTable[]是一个大小为NUM_SAMPLES的全局变量, NUM_SAMPLES putString(*char)是一个写入RS232端口的函数,而delay(float)是一个简单的延迟函数。 我的问题是,一旦sprintf(…)被调用,它就会破坏sinTable ,当在COM信号的接收器端绘制表格时会给出一些非常特殊的结果。 我不希望我的内存不足,因为MC有64KB SRAM。 有人有想法吗?

替代fscanf()/ vscanf()函数系列以使用替代validation密钥或如何创建自定义语言布局?

我更喜欢C语言。我知道从stdin设置变量的唯一方法是使用fscanf() / vscanf()函数系列。 DOS操作系统正在嵌入式市场中复苏。 我使用的设备在程序上与DOS兼容,并使用具有80286指令集的NEC V30Mx。 问题是内置键盘没有输入键,而是使用输入0x1C00键代码的EXE键( Alt输入 ) 。 所以当我写这样的程序时: #include #include #include int main(void) { int res, number = 0; printf(“int value?”); res = scanf(“%d”, &number); printf(“The value is %d”, number); return; } 调用scanf()并在屏幕上显示“ int value? ”。 我可以写数字和超级字母。 但我无法validation输出,因为0x1C0D键代码没有任何特征,EXE键使用不同的键码。 当然C不知道键盘,但C标准库二进制文件寻找输入\n的0x1C0D键代码 。 那么是fscanf() / vscanf()函数系列的替代品,它是C标准库的一部分吗? 更新: 我认为dos下的大多数C标准库都使用软件实现来实现这一点。 我看到DOS调用读取文件,当然,使用数字0导致从标准输入读取。 所以我组装了这个例子 ,将它加载到计算器上,发现自己很惊讶制造商首选处理它的内置软件中的问题,而不是修复操作系统… :- ((我得到了相同的先前结果) 更新 我没想过但是由于评论,我忘了键盘语言做重键代码重映射。 […]

在C中与STM32芯片的内存交互

我想与STM32芯片的内存 STM32L476 进行交互 ,首先读取并存储其电子签名 (MCU_ID),然后在其内存中写入数据 。 我正在使用链接到JTAG ST-LINK的STM32QFP64插槽。 我在C方面做得很好但是真的开始嵌入式编程所以我选择了Atollic Studio IDE,因为它看起来非常完整并且基于Eclipse,我之前已经使用过。 我的问题是我找不到某种文档列出函数,变量等我可以用来与芯片进行交互。 我搜索了ST网站上提供的几乎所有PDF文件,阅读ST的GitHub,但由于我是初学者,我可能错过了这些信息,因为我不知道我在搜索什么样的内容。 下面的代码是不完整的 , 完全是想象的 ,但它可以帮助理解我想要做的事情,我想象的是这样: #define MEMORY_ADRESS_MCU_ID FFFFF // A memory adress ( I should be able to find it in STM32L476 documentation) #define MEMORY_ADRESS_TO_WRITE FFFF // Same unsigned extractMCUID() { return READ_IN_MEMORY(MEMORY_ADRESS_MCU_ID); // Returns the ID stored in a particular memory adress […]

如何将表示使用时间的32位int转换为32位int,表示时间为秒的二进制分数?

POSIX使用struct timeval来表示时间间隔。 struct timeval { time_t tv_sec; unsigned tv_usec; }; GHS Integrity以下列方式代表Time , struct Time { time_t Seconds; unsigned Fraction; }; 例如,0.5sec表示为0x80000000表示为0x40000000 。 从timeval转换为Time的最佳方法是什么? (ps答案不是将POSIX库链接到Integrity并使用POSIX调用。)

在具有两种体系结构的嵌入式系统中使用的整数和布尔类型

我正在为嵌入式系统编写一些软件,主要是在C语言中。它恰好是双核TI平台,我使用的是一些供应商和其他库。 处理器有一个32位的ARM内核,可以进行字节访问( sizeof(char) == 1和sizeof(int) == 4 :8和32位)和一个C28内核,它是一个32位CPU sizeof(char) == sizeof(int) == 1 :两者都是16位( 是的,真的 )。 我打算避免使用像int和char这样的类型来支持我总是明确我在做什么。 无论如何我会计划这个,但是当“char”有点叛逆并且不总是8位时我会加倍。 但是,我有很多整数和布尔值定义(和浮点数,但我们不用担心它们)可供我使用,具体取决于我包含的确切数量和数量: 在ARM方面: // from the ARM compiler’s include dir typedef signed char int8_t; typedef unsigned char uint8_t; typedef short int16_t; typedef unsigned short uint16_t; typedef int int32_t; typedef unsigned int uint32_t; typedef long long int64_t; typedef unsigned […]