回顾
上一章节提到了如何配置开发环境和尝试编写一个点灯程序,可以通过以下传送门查看上一章节内容:
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】配置开发环境和编写一个点灯程序
开始制作电子秤
配置串口
在开始之前,先配置一下串口用于调试输出内容,查看开发板原理图可得知板载的USB转TTL串口连接的是芯片的UART2,也就是P1.09和P1.10
回到IDE中,打开透视图,这里推荐把板载的时钟启用了并切换到外置时钟
在X1那里填写时钟频率,查看板载的开发板可以得知搭载的是8Mhz的晶振。
接下来配置UART引脚,切换到Pin选项卡,配置UART
随后切换到stacks选项卡,点击右上角的New Stack添加UART进来
然后设置一下uart的属性,由于用到的是UART2,这里的通道改成2,默认是0。其余选项不动,默认的波特率为115200
然后再配置一下HX711的引脚,HX711需要用到两个引脚,DOUT和SCK,其中DOUT需要配置为输入模式,SCK配置为输出模式
一切准备就绪后,点击右上角的
生成项目文件
编写嵌入式代码
首先添加UART部分驱动代码,目前的项目SRC文件夹下的结构为
bsp_uart.h代码
#ifndefDEBUG_UART_BSP_UART_H_#defineDEBUG_UART_BSP_UART_H_#include"hal_data.h"#includevoidDebug_UART2_Init(void);voiddebug_printf(char*str, ...);#endif
bsp_uart.c 代码
#include"debug_uart/bsp_uart.h"#include"stdio.h"#include"stdlib.h"#include"stdarg.h"voidDebug_UART2_Init(void) {fsp_err_terr = FSP_SUCCESS; err =R_SAU_UART_Open(&g_uart0_ctrl, &g_uart0_cfg);assert(FSP_SUCCESS == err); }voiddebug_printf(char*str, ...) {uint8_ts[600] = {0};fsp_err_terr = FSP_SUCCESS; va_list args;intlen;if((str ==NULL) || (strlen(str) ==0)) {return; }va_start(args, str); len =vsnprintf((char*) s,600, str, args);va_end(args); err =R_SAU_UART_Write(&g_uart0_ctrl, s, (uint32_t) len);if(err != FSP_SUCCESS) { __BKPT(0); } }
这里主要通过R_SAU_UART_Open来初始化串口,然后编写了一个用于打印输出的debug_printf方法,内部通过R_SAU_UART_Write来把数据发送到串口
接下来看HX711的驱动代码,主要核心部分为
这里需要注意的是瑞萨读取IO的电平需要先赋值给变量然后才能判定IO口电平状态
一切准备就绪后,开始编写入口文件
#include<stdio.h>#include "string.h"#include "adc_driver/hx711.h" #include#include "hal_data.h"FSP_CPP_HEADER void R_BSP_WarmStart(bsp_warm_start_event_t event); FSP_CPP_FOOTER extern long Weight_Shiwu; /*******************************************************************************************************************//*** main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function *is called by main() when no RTOS is used. **********************************************************************************************************************/ void hal_entry(void) { /*TODO: add your own code here*/ Debug_UART2_Init (); Get_Maopi (); // 电子秤去皮 R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); Get_Maopi (); // 再次去皮 while (1) { Get_Weight (); char buff_str[50]; sprintf(buff_str, "weigh: %ld g\r\n", Weight_Shiwu); R_SAU_UART_Write (&g_uart0_ctrl, (uint8_t *)buff_str, (uint32_t) strlen(buff_str)); R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
将固件编译之后烧录到芯片中验证结果,请看下方结果视频,目前验证可以正确的进行称重