我想写一个变量,例如一个数字为5的整数到FLASH,然后在电源消失后再次打开设备读取它.
我已经知道为了写东西我首先需要擦除页面然后写.
在手册中它说:
- 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY1 = 0x0819 2A3B
- 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY2 = 0x4C5D 6E7F
我该如何执行此任务?
扇区0的块地址从0x0800 0000到0x0800 3FFF,这是我想写的地方.
这里是手册的链接,第71页:STM32手册
我最近使用普通USB电缆将USB嵌入式设备(mbed lpc1768)插入Windows 7桌面.根据设备上运行的程序附带的文档,它通过USB虚拟串行端口与主机(桌面)通信.
如果需要使用c#读/写数据,我从哪里开始?我可以使用SerialPort .NET类,还是需要使用LibUsbDotNet库或其他东西?
我正在按照以下步骤使用ADK通过Android Studio控制mbed
但是他们的mbed adkport代码(向下滚动到adkport超链接)需要这些导入
import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;
Run Code Online (Sandbox Code Playgroud)
我注意到另一个线程建议开发人员的解决方案是将其切换到android.hardware.usb,但是当我这样做时,由于基于硬件的软件包不支持getAccessory和getInstance符号,因此3行不同
这个问题有解决方案吗?我无法解决
我尝试按照替换代码的步骤使用android.hardware.usb进行替换,但是我仍然遇到了他们自己的android开发人员例程的问题
//mManager = UsbManager.getInstance(context);
UsbManager mManager = (UsbManager) getSystemService(Context.USB_SERVICE);
Run Code Online (Sandbox Code Playgroud)
但是现在它无法识别getSystemService
这是失败的地方。
public void setup(Context context)
{
//mManager = UsbManager.getInstance(context);
UsbManager mManager = (UsbManager) getSystemService(Context.USB_SERVICE); //<-----
UsbAccessory[] accessoryList = mManager.getAccessoryList();
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(context, 0,
new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
context.registerReceiver(mUsbReceiver, filter);
mManager.requestPermission(accessoryList[0], mPermissionIntent);
if (accessoryList[0] != null) {
mAccessory = accessoryList[0];
if(mManager.hasPermission(mAccessory))
{
openAccessory(mAccessory);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我使用 mbedtls 库编写了以下简单的加密解密程序。加密工作正常(根据http://aes.online-domain-tools.com/检查)。但是,当解密回来时,我得到不正确的结果(输出2和输入不同)。我是否滥用了该库?
int main()
{
mbedtls_aes_context aes;
mbedtls_aes_context aes2;
unsigned char key[16] = "itzkbgulrcsjmnv";
key[15] = 'x';
unsigned char iv[16] = {0xb2, 0x4b, 0xf2, 0xf7, 0x7a, 0xc5, 0xec, 0x0c, 0x5e, 0x1f, 0x4d, 0xc1, 0xae, 0x46, 0x5e, 0x75};
const unsigned char *input = (const unsigned char*) "Some string to b";
unsigned char output[128] = {0};
unsigned char output2[128] = {0};
mbedtls_aes_setkey_enc( &aes, key, 16*8 );
mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_ENCRYPT, strlen((const char*)input), iv, input, output ); …
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用mbedTLS(以前的PolarSSL)在两个对等体之间执行ECDHE-PSK加密.不幸的是,我没有任何关于API的文章/文档需要使用吗?
我有一个这样定义的类:
class sco
{
private:
public:
vector<uint8_t> data;
sco(vector<uint8_t> data);
~sco();
};
Run Code Online (Sandbox Code Playgroud)
构造函数在哪里:
sco::sco(vector<uint8_t> data) {
this->data = data;
}
Run Code Online (Sandbox Code Playgroud)
然后,我有一个这样声明的函数:
void send(unsigned& id, char* data, char len);
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要将sco成员的数据传递给它,但是类型和指针的区别使我感到困惑。如果我有一个newSco成员,其中包含一些数据,将这个send函数调用为send(someId, (char*)&(newSco.data.begin()), newSco.data.size() );
吗?请注意,函数send是针对微控制器的,它采用char类型,因此我无法更改它,也不能更改uint8_t,因为这是来自串行通信的类型。我已经浪费了超过三天的时间,试图将类型转换为相互的东西,只是为了将其反向,因为它破坏了一切。我放弃了,我将不再尝试操纵类型,因为我只是没有时间,即使是不好的做法也只需要它来工作。我以为uint8_t和char大小相同,所以没关系。
我是MbedOS的新手.
关于以下问题我很困惑.
1. yotta和CLI有什么区别?
2.如何将MbedOS移植到我的主板上?
3. Mbed 2.0和3.0有什么区别?
谢谢..
我有一个函数,我想继续运行,直到按下一个按钮(sw2_trig和sw3_trig),这使它进入主循环中的一个模式.问题是,我尝试了while循环和一个执行,同时主循环外循环来实现这一点,但它不能正常工作,它是所有环路的功能,即使我按SW2或SW3我不能进入模式1或2.这是我的代码.
/*********************************************************************
Intereupt Handlers
********************************************************************/
void sw2_interrupt (void) //adapted from driving_test_2
{
sw2_trig = 1;
}
void sw3_interrupt (void) //adapted from driving_test_2
{
sw3_trig = 1;
}
/*******************************************************************************
Functions
*******************************************************************************/
//I want to keep this function running until sw2_trig or sw3_trig is pressed inside the main loop.
void furElise() {
float notes[] = { e, d, e, d, e, b, D, c, _, a, _, c, e, a, b, _, e, g, b, c, _, e, d, e, d, a, …
Run Code Online (Sandbox Code Playgroud) 如果您有兴趣,可以了解一些背景知识...
下一段代码是尝试使用循环冗余校验(CRC-15)来实现数据包错误代码生成器的尝试。这用于检测通信数据损坏。不需要更详细的介绍。
守则和问题
init_PEC15_Table函数是一个查找表生成器。
pec15函数接受数据输入,计算解决方案的地址,并在查找表中找到结果。
data是一个char数组,我为其分配了值1。这将传递给pec15。
现在,我发现只需重新排序cout命令,“ stuffed pec”(即我感兴趣的输出)的值就会发生变化。通过在线阅读,我了解到这可能是由于内存堆栈意外更改而影响结果寄存器,并且可能是由于其他变量的越界操作所致。我是否理解错误?
现在,我是一个初学者,这非常令人生畏。我可能犯了一些我不知道的重大错误,因此请随时将代码撕碎。同样,如果重要的话,此代码也可以在mbed LPC1768上运行。
#include <iostream>
using namespace std;
unsigned short pec15Table[256];
const unsigned int CRC15_POLY = 0x4599;
void init_PEC15_Table() // Cyclical Redundancy Check lookup table generator function
{
unsigned short rem;
for (int i = 0; i < 256; i++)
{
rem = i << 7;
for (int bit = 8; bit > 0; --bit)
{
if (rem & 0x4000)
{
rem = ((rem << 1));
rem = (rem ^ …
Run Code Online (Sandbox Code Playgroud) 在GitHub上,我偶然发现了这个页面(https://github.com/mbedmicro/pyOCD),这有助于使用mbed板.然而,当我看着他们的Hello World示例(下图)时,我真的很困惑.它使用极端奇怪的python语法(由于编译器引发错误,因此无效).
这里是 :
from pyOCD.board import MbedBoard
import logging
logging.basicConfig(level=logging.INFO)
board = MbedBoard.chooseBoard()
target = board.target
flash = board.flash
target.resume()
target.halt()
print "pc: 0x%X" % target.readCoreRegister("pc")
pc: 0xA64
target.step()
print "pc: 0x%X" % target.readCoreRegister("pc")
pc: 0xA30
target.step()
print "pc: 0x%X" % target.readCoreRegister("pc")
pc: 0xA32
flash.flashBinary("binaries/l1_lpc1768.bin")
print "pc: 0x%X" % target.readCoreRegister("pc")
pc: 0x10000000
target.reset()
target.halt()
print "pc: 0x%X" % target.readCoreRegister("pc")
pc: 0xAAC
board.uninit()
Run Code Online (Sandbox Code Playgroud)
我的问题是pc: 0xAAC
代码中出现乱七八糟的" "行.这是一种特殊类型的编码吗?它不起作用,所以有人请指出作者试图得到的东西吗?
谢谢
我想在芯片上的 SRAM 中存储一个简单的整数。(Cortex M4) 我用的程序是mbed online。我知道 SRAM 的地址从 0x2000 0000 开始,并且芯片有 4KB 的内存。
我已经阅读了数据表和位带部分,但这对我来说没有意义。
有人可以向我解释我如何在SRAM中存储例如数字5并再次读取它吗?
当前代码是这样的(c是一个整数,用户通过按钮改变):
if(c==100){
temp=c;
MBX_B0 = 1; // Word write
temp = MBX_B7; // Word read
TIMER_B0 = temp; // Byte write
return TIMER_B7; // Byte read
}
pc.printf("%d",temp);
它只是在 c==100 后停止运行 即使在断电后也应该保存该值。
我正在尝试使用以下命令使用 mbed CLI 编译程序:
mbed compile -m UBLOX_C027 -t ARM
Run Code Online (Sandbox Code Playgroud)
它导致以下错误:
make.py: error: Could not find executable for ARM.
Currently set search path: No path set
Run Code Online (Sandbox Code Playgroud)
如何设置可执行文件?
我需要使用mbed api但仅限于使用C.我如何在ac文件中使用例如SPI类.从在线查看使用C++类,您应该在C++中创建一个包装器函数,但正如我所说的,我不能使用C++,这是他们的另一种解决方法吗?