自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (4)
  • 收藏
  • 关注

原创 C语言数组指针与指针数组,C语言的精华

#include <stdio.h>#include <string.h>#include <stdlib.h>void func(char **p, int num){ for (int i = 0; i < num; i++) {// printf("%s\n", p[i]);// printf("%s...

2020-04-13 21:01:50 281

原创 分段CRC SAE-J1850

不查表,直接算的函数如下。

2023-05-02 10:35:00 309

原创 cmake3.22 armlink -Xlinker的bug

cmake版本3.22时编写的cmakelists.txt脚本,调用armclang和armlink构建mcu工程时,会提示如下错误:解决方法是在build文件夹下找到rules.ninja文件,将-Xlinker修改为-x即可,也可以将cmake的版本降到3.17.5,也能解决此问题。...

2022-03-16 18:18:14 652

原创 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,

2022-02-19 14:08:19 10964 15

原创 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应该也是可以解决发什么回什么的,但程序运行的时候,还是会出现发什么回什么,解决这个问

2021-10-15 10:50:44 1291

原创 按键单按、双按、长按的中断与非中断处理

以下是非中断处理#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

2021-09-24 11:40:40 898 2

原创 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

2021-03-19 16:24:03 5202 15

原创 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

2021-01-06 17:08:39 443

原创 ad5764的回读,硬件spi接口

之前写过了mcu通过硬件spi接口向dac芯片ad5764的数据寄存器写值输出电压,ad5764的offset与gain寄存器的值也是可以通过硬件spi读出来的。第一步:将待读取的芯片设置为读模式第二步与第三步:可以看到在时序图中,回读发生了2次数据发送(spi是同步通信,发送几次意味着接收几次),第一次发送向芯片写入命令,告诉芯片准备读哪个通道的哪个寄存器,返回的数据是未定义的,可以不用管;第二次发送NOP,接收芯片返回的寄存器的值。接下来就是编写代码实现功能了,因为板子上有2颗ad5762与

2020-12-12 21:06:38 2518 1

原创 vscode开发stm32项目时提示找不到uint32_t类型的解决办法

添加一个配置就行了。

2020-12-04 21:25:41 7654 11

原创 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 ...

2020-11-30 13:13:55 1721 3

原创 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时间,极短,但是很重要。还有

2020-11-28 10:48:13 3722

原创 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

2020-11-05 17:36:13 1009

原创 ADC芯片的校准

有些DAC芯片中有校准用的寄存器(offset、gain),比如AD5764,而有些ADC芯片则没有,比如ads8689,那么就需要进行人为校准了。其实ads8689的线性度还是非常好的。校准的时候需要ADC芯片对DAC芯片的输出进行测量,并将反馈结果记录在表中。通过excel中的折线图也可以对比看它们的线性度,之后利用python或者其他语言进行一元线性回归,即可求出k和b的值。adc列是位校准的测量数据,meter中是高精度万用表的测量数据(以此为准),dac列则是校准过offset与gain的数

2020-09-03 11:07:28 10556 2

原创 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

2020-06-27 20:23:26 457

原创 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];

2020-06-23 22:37:14 1082

原创 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] .

2020-06-20 21:50:59 644 4

原创 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.

2020-06-20 21:46:24 2532 7

原创 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

2020-06-20 19:55:19 1310

原创 C语言双向链表(创建、插入、遍历、删除)

#ifndef DLIST_H#define DLIST_Htypedef struct NODE{ int data; struct NODE *pre; struct NODE *next;}node;node *createhead(void);node *createnode(int data);void insertbyhead(node* hea...

2020-04-13 20:57:14 543

原创 C语言单向链表(头插、尾插、遍历、删除、反转)

#include <stdio.h>#include <stdlib.h>#include <memory.h>#if 1typedef struct NODE{ int data; struct NODE *next; }node;#if 0node *createlist_tail(void){ node *...

2020-04-13 20:49:04 290

原创 PyQt5 QButtonGroup QCheckBox的互斥

def set_turn_speed(self): cb_group = QButtonGroup() self.cb_speed1.setCheckable(True) self.cb_speed2.setCheckable(True) cb_group.addButton(self.cb_speed1, 0) cb_group.addButton(self.cb_spee...

2020-04-01 12:17:08 1867

原创 bytearray

num = 0x7d00a = num & 0xff # 低位b = (num >> 8) & 0xff # 高位c = num % 256 # 低位d = num / 256 # 高位print(a, b, c, d, type(a), type(b), type(c), type(d))num_arr = bytearray([a, b])...

2020-03-31 16:23:02 184

原创 C语言stdlib.h中自带的qsort

#include <stdio.h>#include <stdlib.h>#include <string.h>int funcmp(const void *pa, const void *pb){ return strcmp(*(char**)pa, *(char**)pb) > 0 ? 1 : -1;}int main(int ar...

2020-03-31 13:57:11 422

原创 C语言中的排序(优化后的选择排、冒泡排)

/*优化后的选择排序,比较次数不变的前提下减少交换次数*/void selectsort(int arr[], int n){ int index, i, j; for (i = 0; i < n - 1; i++) { index = i; for (j = i + 1; j < n; j++) { if(a...

2020-03-31 13:48:52 276

原创 PyQt5 pushbutton 学习

# pushbutton继承自QAbstractButton,但启动AutoRepeat之后,会按照一定周期自动发出pressed、released、clicked这3个信号,很多时候需要按住按钮来重复执行一个功能,松开按钮就停止执行,就可以通过如下代码实现# 设置自动重复执行功能和间隔时间self.btn_turnright.setAutoRepeat(True) self.btn_tur...

2020-03-30 21:12:27 880

原创 make_tuple并不会将字符串转string

constexpr auto tup1 = make_tuple(20, "lucy");cout << get<string>(tup1) <<endl; // 错误,"lucy"是char*tuple<char, string> tup2 ('a', "abcd");cout << get<string>(tup2)...

2020-03-24 16:52:23 266

原创 PyQt5中关于获取串口信息的过程

def uart_init(self): global uart_name_list, uart_desc_list, count self.plainTextEdit.setReadOnly(1) self.com = QSerialPort() port_numb = QSerialPortInfo.availablePorts() for info in port_nu...

2020-03-24 16:07:45 1856 1

原创 python pyserial编程 找到想要的串口号

之前写过一个threading的帖子操作串口与stm32通信,当时未多想没有发现其中的bug,因为电脑可能连有多个串口,那么需要找到合适的那个串口进行通信,于是有了下面的代码,分享一下。......import serial.tools.list_portsif __name__ == "__main__": global num num = random.randint(20, 30)...

2020-03-08 21:53:34 3146

原创 python学习之threading

import threadingimport timeimport randomimport serial.tools.list_portsdef thread1(): global num while True: if num >= 0: lock2.acquire() try: num -= 1 a = str(random.randint(...

2020-03-04 16:29:26 134

原创 STM32f407ZGT6 HAL + ili9341 + FreeRTOS + emWin5.44移植

软件下载首先去st官网下载好stm32cubemx,我是v5.5.0版的打开软件选择芯片、开启时钟这些就不细说了。直接上FSMC的配置,每个人的板子不同,请根据自己板子原理图进行配置注意看红色方框中的引脚,配置的时候需要对应根据原理图对应选择NE4、LCD interface、A6、16bits,再把PC0引脚选择为GPIO_INPUT就行了。nor timing的3个参数先不设置,...

2020-02-12 17:05:48 4160 6

原创 C语言删除字符数组中的空格

一个删除字符数组中空格的功能,见代码#include <stdio.h>#include <string.h>#include <memory.h>void clearStringAllspace(char *s){ char *temp = s; while (*temp) { if(*temp != ' ' &amp...

2020-02-12 15:11:04 4418

原创 C语言字符串逆序

以下是一个字符串的逆序,见代码#include <stdio.h>#include <string.h>#include <memory.h>void str_reverse(char* buff){ char* start = buff; char* end = start + strlen(buff) - 1; while ...

2020-02-12 15:06:54 264

原创 python学习 继承

学习python的过程中对继承的一个测试,目的是初始化子类对象,并在外部修改属性和调用子类方法访问父类对象成员,以下是测试代码。country = "英国"class school(object): country = '中国' def __init__(self, name, address, number): self.name = name self.address = ad...

2020-02-12 14:39:57 144

原创 按键消抖

##按键消抖uint16_t key_scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin){uint16_t count;for(count = 0;count < 10;){HAL_Delay(10);if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==0){count++;}else count–;}if...

2019-05-24 22:10:56 174

原创 将一条字符串拆分成数条并拷贝到指针数组中

#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){ char str[80]="hello,linux,12345"; char* p; char d[2][50]={ 0 }; int i; int k; p=strtok...

2018-11-03 17:25:10 565

原创 fgets学习

#include <stdio.h>#include <string.h>//#include <stdlib.h>int main(){ char s[50]=""; FILE *p=fopen("c.txt","w"); while(1) { memset(s,0,sizeof(s)); fgets(s...

2018-10-22 14:50:37 247

ad5764 spi菊花链通信

使用NUC123SD4AN0单片机的硬件SPI接口与4颗da芯片进行菊花链通信,文件中对reset和ladc pin函数进行了实现,对mcu的spi接口初始化配置进行了实现,对spi的读写函数进行了实现,同时对dac芯片的其它操作进行了实现。

2020-11-28

ADS8689 软件模拟SPI驱动

单片机使用软件模拟SPI与TI芯片ADS8689进行通信,在头文件中定义了寄存器地址和命令,在.c文件中对初始化函数、读写函数进行了实现

2020-06-03

AD5764.zip

使用软件模拟SPI,在SPI0模式下,与DAC芯片AD5764进行通信,头文件中定义了寄存器地址和命令,.c文件中对读写函数进行了实现

2020-06-03

FreeRTOS_emWin.rar

以stm32f407zgt6芯片为例,移植emwin5.44图形库,TFT驱动芯片为ili9341,实时操作系统为freertos。

2020-02-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除