本帖最后由 huazai1995 于 2024-5-12 00:29 编辑
BL 芯片型号确实强悍 内核
1 bl60x(bl602/bl604) RISC-V SiFive E24
2 bl70x(bl702/bl704/bl706) RISC-V SiFive E24
3 bl61x(bl616/bl618) RISC-V T-Head E907
4 bl808 RISC-V T-Head E902(lp)+E907(m0)+C906(d0)
科技进步真是快,RISC-V内核的MCU 的应用越来越广泛。
接来是安信可Ai-M61-32S开发环境搭建!
上电后串口终端设置2000000波特率,打印启动信息;
- ____ __ __ _ _ _
- | _ \ / _|/ _| | | | | | |
- | |_) | ___ _ _| |_| |_ __ _| | ___ | | __ _| |__
- | _ < / _ \| | | | _| _/ _` | |/ _ \| |/ _` | '_ \
- | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) |
- |____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/
- Build:22:54:10,May 8 2024
- Copyright (c) 2022 Bouffalolab team
- =========== flash cfg ==============
- jedec id 0x5E4017
- mid 0x5E
- iomode 0x04
- clk delay 0x01
- clk invert 0x01
- read reg cmd0 0x05
- read reg cmd1 0x35
- write reg cmd0 0x01
- write reg cmd1 0x31
- qe write len 0x01
- cread support 0x01
- cread code 0x20
- burst wrap cmd 0x77
- =====================================
- dynamic memory init success, ocram heap size = 281 Kbyte
- sig1:ffffffff
- sig2:0000f32f
- cgen1:9f7ffffd
复制代码 【小熊带你玩转小安派】环境搭建和烧录可能遇到的问题 - 小安派S1&M61教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
在压缩包AiPi-Open-Kits.zip文件夹解压后,接下来完成配置我们系统环境的变量。
最后修改一下 project.build文件,就可以放心编译了;
我们可以使用VSCODE 打开示例,进行编译(即 点击 在集成终端中打开)后,在命令行输入make等待编译完成。
通过上传固件 完成固件更新make flash COMX=COM11 (COM11 根据自己系统识别到的串口号进行填写即可)
完成了一小步
安信可SDK做的确实很不错,扩展了很多可能性!
机器学习上支持sipeed的tinymaix 和Google的tensorflowlite
pikapython可玩性也很高!
用库函数准备搞一个LM75 温度读取,还没搞完,没研究明白库函数,后面接着研究。
- #include "bflb_mtimer.h"
- #include "bflb_i2c.h"
- #include "bflb_gpio.h"
- #include "board.h"
- #define I2C_SLAVE_ADDR 0x48 //I2C的从机地址
- static struct bflb_device_s *i2c0; //i2c0外设句柄
- struct bflb_i2c_msg_s msgs[2]; //I2C发送数据结构体数组
- void My_i2c0_gpio_init() //初始化I2C的gpio引脚,选择IO_0作为SDA,IO_1作为SCL
- {
- struct bflb_device_s* gpio;
- gpio = bflb_device_get_by_name("gpio");
- /* I2C0_SCL*/
- bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
- /* I2C0_SDA */
- bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
- }
- //I2C写入数据函数
- static uint8_t LM75_i2c_write(char reg_addr, char buff, char buf_size)
- {
- /* Write data */
- msgs[0].addr = I2C_SLAVE_ADDR;
- msgs[0].flags = I2C_M_NOSTOP;
- msgs[0].buffer = reg_addr;
- msgs[0].length = buf_size;
- msgs[1].addr = I2C_SLAVE_ADDR;
- msgs[1].flags = 0;
- msgs[1].buffer = &buff;
- msgs[1].length = buf_size;
- bflb_i2c_transfer(i2c0, msgs, 2);
- bflb_mtimer_delay_ms(100);
- return 1;
- }
- //I2C读取数据函数
- static int16_t LM75_i2c_read(char reg_addr, char buf_size)
- {
- char read_data = 0;
- int16_t temp_data=0;
- /* Read data */
- msgs[0].addr = I2C_SLAVE_ADDR;
- msgs[0].flags = I2C_M_NOSTOP;
- msgs[0].buffer = reg_addr;
- msgs[0].length = 1;
- msgs[1].addr = I2C_SLAVE_ADDR;
- msgs[1].flags = I2C_M_READ;
- msgs[1].buffer = &temp_data;
- msgs[1].length = buf_size;
- bflb_i2c_transfer(i2c0, msgs, 2);
-
- bflb_mtimer_delay_ms(100);
- return temp_data;
- }
- //LM75 初始数据配置函数
- static int32_t LM75_init(void)
- {
- printf("radar init\n");
- uint8_t value;
- My_i2c0_gpio_init();
- printf("TM1637_init done\n");
- return 0;
- }
-
- void LM75A_GetTemperature(void)
- {
- /*
- Temp register
- -------------------------------------------------------------
- MSByte |LSByte
- 7 6 5 4 3 2 1 0 |7 6 5 4 3 2 1 0
- D10 D9 D8 D7 D6 D5 D4 D3 |D2 D1 D0 X X X X X
- -------------------------------------------------------------
- D10=0温度为+,D10=1温度为-
- */
- float TempHL;
- int16_t temp;
- temp = LM75_i2c_read(0x00,2);
- TempHL=(temp>>5)*0.125;
- printf("Tempog:%d\r\n", temp);
- printf("Temp:%f\r\n", TempHL);
- }
- int main(void)
- {
-
- board_init();
- //I2C引脚初始化
- My_i2c0_gpio_init();
- i2c0 = bflb_device_get_by_name("i2c0");
- //I2C初始化 (305K-400K)
- bflb_i2c_init(i2c0, 400000);
- //_init配置
- // LM75_init();
- while(1){
- bflb_mtimer_delay_ms(1000);
- LM75A_GetTemperature();
- }
- }
复制代码
|