哥哥教你学嵌入式 之 智芯科技 开发板 Z20K11x系列 教程(一)

文章日志
1.写于2022/11/25(网上这块板子的教程几乎没有,呜呜呜,只得自己写了)
文章目录

1.认识开发板

2.串口相关程序代码及现象记录与思考

3.关于在一块板子上iic0和iic1主从收发例子实现

1.认识开发板

智芯官网:https://www.zhixin-semi.com/

Z20K11x系列板子介绍:

基于ARM CORTEX M0+的中低端微控制器,高达256K P FLASH + 128K D FLASH,2路CANFD接口,4路UART/LIN接口,多种封装类型,适用于车身控制、空调控制、照明控制、中小功率电机控制等各种应用

主要特点:

基于ARM CORTEX M0+
主频高达64 MHz
工作电压:2.7~5.5V
提供两块物理独立的大容量FLASH(256KB Code FLASH + 128KB Data FLASH)
32KB SRAM
2路CANFD接口,每路CAN支持64个报文邮箱
4路UART, 支持硬件LIN Frame,节省CPU负荷
高达16路DMA,适用于多路数据传输
AEC-Q100 Grade 1认证

目标应用:

电动座椅,电动车窗,电动天窗,电动尾门,门模块
空调控制
灯光控制
底盘控制,制动控制等
新能源类应用,PTC,空调压缩机,ACDC, DCDC等
无刷电机控制
其他中小型CAN节点应用等

开发板实物图:

(不得不吐槽一下,左边的烧录模块,我没有对应的线束,只得用杜邦线+我的st-link连的,太松了,经常会导致keil无法识别到设备…太耽误事了。好在后面,我把一些可以连在其他的地方的线,连其他地方就基本上解决了这个问题)

比如下面:最左边的烧录模块,我就只连了两根杜邦线,其他三根连在其他可以连的地方

(还有一个吐槽的地方,这些gpio模块,J1 J2 J3 J4,不够直观啊,要是能提供一个很直观的图就好了。尽管板子后面标的有gpio序号,但是翻来翻去,很容易导致烧录模块的线解除不良,keil识别不到设备,而且很麻烦。虽然我可以拍个照,但也要经过大脑里面一层转换,还是不太直观。)

所以,我自己花时间做了个图:

这样子舒服多了,想连哪个,直接对照着这个图就行了。

如果读者有这个开发板的话,sdk和附带的一些例子应该也是有的。

好像车规级的开发板样板都是这种样子的,很小的一块板。

2.串口相关程序代码及现象记录与思考

这块板子usb转串口模块,是串口1的,pc和板子用usb线连上就可以用了。

当然了,如果想使用其他串口模块,可以将其他串口模块对应的io连上额外的usb转ttl模块,又或者可以使用蓝牙串口模块。可以看我的另一篇博客【惊!STM32 蓝牙串口模块(H21/JDY-31) 竟如此简单!】

为什么开发板附带的例子demo,不提供串口直接打印一段字符串的接口啊。

还得自己造轮子…

//这个函数,只能打印字符串。如:uart1_print("Hello uart1_print\r\n");
void uart1_print(char *send_data)
{/* system init */System_Init_my_uart1();//这个初始化函数我就不贴了uint8_t data[100];uint8_t i = 0;uint8_t j = 0;while((*send_data != '\0') && (i < 100)){data[i] = *send_data;send_data++;i++;}for(j = 0;j < i;j++){/* wait for TEMT flag bit of Line Status Register to be set */while(RESET == UART_GetLineStatus(UART1_ID,UART_LINESTA_TEMT));/* send data back */UART_SendByte(UART1_ID, data[j]); }}

当然了,我们可以添加微型库,重写fputc方法,这样我们就可以使用printf函数啦。

int fputc(int ch,FILE *p)  //函数默认的,在使用printf函数时自动调用
{UART_SendByte(UART1_ID, ch);while(RESET == UART_GetLineStatus(UART1_ID, UART_LINESTA_TEMT));return ch;
}

记录下这块板子关于串口的一些现象:

//波特率 设置9600 打印会多出来一个方框字符。这里设置57600 现象消失
//如果是蓝牙串口 波特率不能太高 改为9600,但没有方框字符

奇怪,太奇怪了,9600波特率,只使用uart1_print,现象如下:

3.关于在一块板子上iic0和iic1主从收发例子实现

这里我遇到大坑了,我也不知道为什么,一块板子测试,主发送7个数据,再从接收7个数据,这个逻辑,执行起来不通。

太耗费我情绪力量了。好几天后,我试着自己重新写下逻辑,试着发送一次,接收一次,哦,居然通了。后面测试,一块板子上,一次最大传送4个数据。

master_send_buffer(I2C1_ID,txBuffer1,4);//这里测试,按照顺序执行master发送,slave接收。一次最大传输长度,为4
slave_receive_buffer(I2C0_ID,4);master_send_buffer(I2C1_ID,txBuffer1,4);//这里测试,按照顺序执行master发送,slave接收。一次最大传输长度,为4
slave_receive_buffer(I2C0_ID,4);

然后,我试下从发送主接收。

slave_send_buffer后,master_receive_buffer,这样子是不会通的。

仔细看了下代码逻辑,从在发送前,要先主发送一个请求,Wait RD_REQ interrupt

所以,在一块板子上测试,逻辑只能自己写了。

//主 发送 读命令
I2C_MasterReadCmd(I2C1_ID,I2C_RESTART_AND_STOP_DISABLE);
/* Wait RD_REQ interrupt */
while(RESET == I2C_GetIntStatus(I2C0_ID, I2C_INT_RD_REQ));
/* Clear RD_REQ interrupt */
I2C_ClearInt(I2C0_ID, I2C_INT_RD_REQ);
/* When TX FIFO is not full, the slave sends one byte */
while(RESET == I2C_GetStatus(I2C0_ID, I2C_STATUS_TFNF));
I2C_SlaveSendByte(I2C0_ID, 0x57);
/* When RX FIFO is not empty, the master receives one byte */
while(RESET == I2C_GetStatus(I2C1_ID, I2C_STATUS_RFNE));
uint8_t master_res = I2C_ReceiveByte(I2C1_ID);
printf("===%c \r\n",master_res);

以上。

哥哥教你学嵌入式 之 智芯科技 开发板 Z20K11x系列 教程(一)相关推荐

  1. 龙芯2k开发板Debian系统安装教程

    龙芯2k开发板Debian系统安装教程 1 准备安装u盘 1.1 获取u盘设备名 将U盘插入个人debian/ubuntu电脑,使用lsblk获取U盘设备名 我的u盘设备名为sdb(sda为我的主硬盘 ...

  2. 学嵌入式,一定要买开发板吗?

    经常有同学:我想学嵌入式,应该买哪个板子? 这个问题本身就是错的. 如果你去问10个买过开发板的人,至少有8个最终都吃灰了,而且他也没通过这个板子以及板子附带的所谓"教程"真的学会 ...

  3. linux嵌入式主要学什么,学嵌入式linux,用什么开发板,请大家推荐一下

    搞个嵌入式linux培训班的课程来看下,就知道要学什么了 C语言基础.C++基础.数据结构.操作系统原理.Linux应用基础.电子电路基础 开课前一周:入学基础测试与辅导(C语言.C++.linux基 ...

  4. 迅为推出龙芯iTOP-2K1000开发板简介

    迅为龙芯开发板是北京迅为电子推出的一款基于国产 CPU 龙芯 2K1000 开发板.采用核心板+底板 的方式. 迅为电子的iTOP-2K1000核心板对外提供的接口是邮票孔方式.搭载龙芯2K1000处 ...

  5. 手把手教你如何使用Multisim对Digilent FPGA开发板进行编程

    1.jpg (43.84 KB, 下载次数: 0) 下载附件 2017-6-1 20:03 上传 FPGA正在逐渐成为EECS专业的同学们在校期间学习掌握的一项必备技能.无论是在课程实验.竞赛作品.科 ...

  6. 迅为龙芯2K1000开发板双核64位系统处理器,流畅运行多个系统

    迅为电子的iTOP-2K1000核心板对外提供的接口是邮票孔方式.搭载龙芯2K1000处理器,处理器集成2个64 位GS264处理器核,主频1GHz,以及各种系统IO接口.集高性能与高配置于一身. 迅 ...

  7. 迅为龙芯2K1000开发板Linux环境变量

    1 环境变量 环境变量是系统预设值的参数. Linux 是一个多用户的操作系统, 所以每一个用户也都有自己的环境变量. 举例: 比如我们之前学习的命令不管在哪个路径下输入, 都是可以执行成功的, 因为 ...

  8. 龙芯ls1b开发板 基础操作

    龙芯ls1b开发板 基础操作 一. 工具链 1.工具链获取 pmon与kernel使用同一个工具链:gcc-4.3-ls232 http://ftp.loongnix.cn/embedd/ls1b/t ...

  9. 迅为-龙芯2K1000开发板虚拟机ubuntu系统开关机

    龙芯2K1000开发板在安装完虚拟机ubuntu系统以后,我们要正确的进行开关机操作,如果开关机操作不当,可能会造成虚拟机ubuntu系统崩溃,所以当我们结束在ubuntu系统上的工作以后,我们要正确 ...

最新文章

  1. java curator_[java,zk]在 linux 上快速搭建 zookeeper curator 开发环境
  2. Vue.js 整理笔记
  3. jquery链式写法 java_jQuery链式操作
  4. fckeditor编辑器自定义加按钮菜单
  5. C++11线程管理基础
  6. ID生成器 雪花算法
  7. matlab 里try用法,matlab在整个程序(全局)中使用try-catch来报告错误
  8. 安徽阜阳计算机高中学校排名,安徽阜阳排名靠前的三大高中,有争议?2020年高考成绩说话!...
  9. 简单scrapy爬虫实例
  10. 【less-6】sqli-labs靶场第六关(类似less-5)
  11. Solr管理索引库——(十三)
  12. tp框架 中的时间 查询范围
  13. 六石管理学:半弹性工作时间
  14. c语言链表插入尾部,为什么我的程序一执行插入链表尾部,再执行别的操作就会出现问题,...
  15. excel中相对引用、绝对引用、混合引用
  16. GDOI2016模拟8.19数学
  17. 使用bat命令快速创建系统还原点的方法
  18. 机器视觉开源处理库汇总
  19. GMS/EDLA认证
  20. Ctrix卸载ReceiverCleanupUtility.exe

热门文章

  1. TS2532: xxx is possibly ‘undefined‘.
  2. Java怎么弹出cmd命令窗口_怎么在java里打开bat文件,并打开cmd窗口执行,举例一个完整代码。...
  3. 字节青训营第三课之高质量编程与性能调优实战的笔记和总结
  4. Centos7 一键安装WPS
  5. springdata jpa jpql 条件查询
  6. 计算机教室学生上机须知,微机室上机须知
  7. Layui.open 弹出上传图片、视频预览
  8. 贺利坚的课程教学链接
  9. 安装软件时出现“error creating process错误”
  10. c#中在一个窗体中触发另一个窗体的事件