cmake3.22 armlink -Xlinker的bug cmake版本3.22时编写的cmakelists.txt脚本,调用armclang和armlink构建mcu工程时,会提示如下错误:解决方法是在build文件夹下找到rules.ninja文件,将-Xlinker修改为-x即可,也可以将cmake的版本降到3.17.5,也能解决此问题。...
GD32 硬件iic 读、写和快速读、写实现。 芯片:GD32F105VGT6亲测可用,宏MPU_ADDR 根据电压决定,我这里是0x68。初始化IOvoid mpu6050_pin_init(void){ rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_AF); rcu_periph_clock_enable(RCU_I2C1); gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_2MHZ,
gd32e103 usb库的不足 在使用gd32e103 usbd_cdc_acm(虚拟串口)时,发现调用cdc_acm_data_receive和cdc_acm_data_send时,cdc_acm_data_send经常回复cdc_acm_data_receive接收到的数据,查看了cdc_acm_core.h头文件,可以发现数据结构usb_cdc_handler只有一个数据缓冲区,也就是说接收和发送共用一个数据缓冲区,如果是这样,在发送之前memset应该也是可以解决发什么回什么的,但程序运行的时候,还是会出现发什么回什么,解决这个问
按键单按、双按、长按的中断与非中断处理 以下是非中断处理#include "gd32e10x.hint main(void){ volatile static uint8_t a = 0, b = 0, c = 0, d = 0; systick_config(); rcu_periph_clock_enable(RCU_GPIOC); gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_6); rcu_periph_cloc
GD32F103和GD32E230在串口接收模式(dma + idle)的区别 先上GD32E230的串口DMA代码。static void rgb_com_dma_init(void){ /* enable DMA clock */ rcu_periph_clock_enable(RCU_DMA); /*configure DMA interrupt*/ nvic_irq_enable(DMA_Channel1_2_IRQn, 1); /* initialize DMA channel2 */ dma_deinit(DMA_CH2
qt5利用qcombo box的信号扫描串口列表 在MainWindow下开启self.centralwidget.setMouseTracking(True)self.lcc_uart_port.setMouseTracking(True)self.fluke_uart_port.setMouseTracking(True)利用combo box的activated信号连接槽函数self.lcc_uart_port.activated.connect(self.scan_uart_port)self.fluke_uart_port.acti
ad5764的回读,硬件spi接口 之前写过了mcu通过硬件spi接口向dac芯片ad5764的数据寄存器写值输出电压,ad5764的offset与gain寄存器的值也是可以通过硬件spi读出来的。第一步:将待读取的芯片设置为读模式第二步与第三步:可以看到在时序图中,回读发生了2次数据发送(spi是同步通信,发送几次意味着接收几次),第一次发送向芯片写入命令,告诉芯片准备读哪个通道的哪个寄存器,返回的数据是未定义的,可以不用管;第二次发送NOP,接收芯片返回的寄存器的值。接下来就是编写代码实现功能了,因为板子上有2颗ad5762与
mcu io模拟i2c 驱动tca6424a #ifndef __TCA6424A_H__#define __TCA6424A_H__#include <stdint.h>#include "NUC123.h"#define CLOSE_LED 0#define CHANNEL_SELECT 1#define MODE_SELECT 2#define VOLT2 3#define TRIGGER 4#define VOLT1 5#define FREQ 6#define CH1 ...
ad5764的spi菊花链通信 有一个模拟板子上有4个dac芯片,2颗ad5762和2颗ad5764,最终使用了mcu的硬件spi做菊花链通信。可以看到mcu的spi sdo进入到u29 ad5762的sdin后,u29 ad5762的sdo进入到u57 ad5762的sdi,依次类推,最后从u69 ad5764的sdo进入到mcu的sdin中,完成一个环。而ad5762与ad5764的所有LDAC都是并联的,公用mcu上的一个pin脚。菊花链的部分还是要多看芯片手册。这里可以看到有一个t15时间,极短,但是很重要。还有
Pyqt5中关于QMutex的问题 这是子线程的启动部分,第一次启动的时候2个qmutex的lock是成功的,顺利进行了下面的启动 if channel_num in range(1, 7): self.dac_dict['channel_num'] = channel_num self.dac_dict['h_or_l'] = 1 self.dac_dict['lcc_flag'] = 0 self.dac_dict['fluke
ADC芯片的校准 有些DAC芯片中有校准用的寄存器(offset、gain),比如AD5764,而有些ADC芯片则没有,比如ads8689,那么就需要进行人为校准了。其实ads8689的线性度还是非常好的。校准的时候需要ADC芯片对DAC芯片的输出进行测量,并将反馈结果记录在表中。通过excel中的折线图也可以对比看它们的线性度,之后利用python或者其他语言进行一元线性回归,即可求出k和b的值。adc列是位校准的测量数据,meter中是高精度万用表的测量数据(以此为准),dac列则是校准过offset与gain的数
nuc123的timer操作 #include "NUC123.h"static uint32_t Module_Temp = 0;// Time-out period = (Period of Timer clock input) * (8-bit PRESCALE + 1) * (24-bit TCMP).(在NUC123.h文件TIMER_T::TCMPR寄存器的描述中有此公式)// 调制频率定时器,0-300Hzvoid Timer1_Init(void){ CLK_SetModuleClock(TMR1_MO
nuc123将结构体对象写入flash的操作 #include <stdio.h>#include <stdlib.h>#include <memory.h>#include <stdint.h>#pragma pack (4) /*指定字节对齐*/struct Testing_Equipment{ // uint8_t Help; // 帮助命令标志位 uint8_t IDString[4];
nuc123 ad5764 软件模拟spi驱动程序 源代码如果需要源代码请下载AD5764.c/** Vout = -2 * Vrefin + 4 * Vrefin[D / 65536]* D = ((Vout + 10) * 65536) / 20*/#include <stdio.h>#include "NUC123.h"#include "AD5764.h"#include "delay.h"unsigned char InputBuf[32] = {0};unsigned char OutputBuf[32] .
nuc123 ADS8689软件模拟SPI驱动程序 ADS8689.c#include <stdio.h>#include <string.h>#include "ADS8689.h"#include "delay.h"static uint8_t receive[4] = {0};const float reference_voltage = 4.096;const uint8_t range = 5;void ADS8689_Init(void) { GPIO_SetMode(PD, BIT0 | BI.
PyQt5综合demo(QSerialPort QThread QWidget) # !usr/bin/env python# -*- coding:utf-8 -*-import time, csv, sysfrom PyQt5 import QtWidgetsfrom fluke8845A import Ui_MainWindowfrom PyQt5.QtSerialPort import QSerialPort, QSerialPortInfofrom PyQt5.QtCore import Qt, QThread, pyqtSignal, QObjectfrom P