使用keil如何自查当前板子上所用单片机芯片的型号?例如如果当前板子上焊的是stm32f103vet6则通过代码实现令数组t等于103,如果当前板子上焊的是stm32f407vet6则通过代码实现令数组t等于407。请给我具体代码并详细解释
时间: 2024-03-05 21:53:30 浏览: 65
查看CPU型号
要自查当前板子上所用单片机芯片的型号,可以通过读取芯片内部的 Flash 地址来获取。每种芯片都有一些特定的 Flash 地址,可以从这些地址中读取芯片型号等信息。
以下是使用 Keil 实现获取芯片型号的代码:
1. 在代码中定义一个整型数组 t,用于保存芯片型号。
```
int t[3] = {0};
```
2. 定义一个指向 Flash 地址的函数指针。
```
typedef uint32_t (*pFunc)(void);
pFunc GetChipID = (pFunc)0x1FFFF7E8; // STM32F1 系列的 Flash 地址
```
3. 获取 Flash 地址中的芯片型号。
```
uint32_t chipID = GetChipID();
if ((chipID & 0xFFF) == 0x413) { // STM32F4 系列的芯片型号前三位为 0x413
t[0] = 4;
t[1] = 0;
t[2] = (chipID >> 16) & 0xF;
} else if ((chipID & 0xFFF) == 0x410) { // STM32F1 系列的芯片型号前三位为 0x410
t[0] = 1;
t[1] = 0;
t[2] = (chipID >> 12) & 0xF;
}
```
4. 在以上代码中,通过调用 Flash 地址中的函数指针 GetChipID 获取芯片型号,并根据芯片型号设置数组 t 中的前三个元素。例如,如果当前芯片为 STM32F103VET6,则 t 数组中的元素值应为 [1, 0, 3]。
完整代码如下:
```
int t[3] = {0};
typedef uint32_t (*pFunc)(void);
pFunc GetChipID = (pFunc)0x1FFFF7E8; // STM32F1 系列的 Flash 地址
uint32_t chipID = GetChipID();
if ((chipID & 0xFFF) == 0x413) { // STM32F4 系列的芯片型号前三位为 0x413
t[0] = 4;
t[1] = 0;
t[2] = (chipID >> 16) & 0xF;
} else if ((chipID & 0xFFF) == 0x410) { // STM32F1 系列的芯片型号前三位为 0x410
t[0] = 1;
t[1] = 0;
t[2] = (chipID >> 12) & 0xF;
}
```
需要注意的是,以上代码只能获取当前板子上所用单片机芯片的型号,如果需要获取更详细的芯片信息,可以使用芯片厂家提供的库函数或者自己编写代码进行获取。
阅读全文