本帖最后由 aple0807 于 2021-8-6 10:17 编辑
首次接触RISC-V芯片,使用上和ARM-M系列芯片类似。 就CH32V103而言,外设结构和STM32103基本一致,寄存器排列似乎也是一样的。
经过几天的研究,对CH32芯片及其开发环境有了基本的认识。通过移植 modbus 学习芯片基础外设及软件结构。
modbus移植主要涉及串口操作及定时器管理。
熟悉stm32的话,对芯片理解会比较容易,反而开发环境的适应可能会遇到麻烦。
下面先说说我遇到的问题:
1、库项目建立,MounRiver 不像Keil和IAR那样可以直接建立空工程来选择生成库。它会强制生成带很多初始文件的应用项目,需要手动删除,然后在C/C++ Build->Settings->Build Artifact中选择生成静态库。
2、库文件导入也不是直接添加目录文件就可以的。需要在项目属性里面手动添加文件名及路径。
3、芯片中断系统用的是和arm一样的NVIC结构,但书写上有差别。
arm的中断函数写法和普通函数一样。
RISC-V的中断函数需要__attribute__((interrupt("WCH-Interrupt-fast")))属性声明。
观察汇编结果可以看到普通函数的返回用的RET指令,中断函数用的MRET指令,这点类似51,属性修饰应该是影响返回指令的。
移植过程中串口及定时器操作和stm32基本一样,因为我是习惯用寄存器的,没感觉就多大差别。
需要注意的是,板子上的BOOT0浮空虽然测得是低电平,但还是要用跳线帽接地,否则调试启动会莫名跑飞。
下面附上测试工程。
v103_demo.rar
(941.64 KB)
ModbusDebug.rar
(39.7 KB)
项目使用资源:
TIM4: 提供APP时基
PA6,PA7 : 连接LED1,LED2。需手动跳线。
UART2 : modbus从机,115200,8N2,站号2。 开放HOLD区数据地址0~1024
UART3 : modbus主机,115200,8N2
两路modbus通信测试
PA2 <--> PB11
PA3 <--> PB10
|