- 博客(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
315
原创 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
739
原创 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
13165
19
原创 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
1557
原创 按键单按、双按、长按的中断与非中断处理
以下是非中断处理#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
1246
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
5545
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
527
原创 ad5764的回读,硬件spi接口
之前写过了mcu通过硬件spi接口向dac芯片ad5764的数据寄存器写值输出电压,ad5764的offset与gain寄存器的值也是可以通过硬件spi读出来的。第一步:将待读取的芯片设置为读模式第二步与第三步:可以看到在时序图中,回读发生了2次数据发送(spi是同步通信,发送几次意味着接收几次),第一次发送向芯片写入命令,告诉芯片准备读哪个通道的哪个寄存器,返回的数据是未定义的,可以不用管;第二次发送NOP,接收芯片返回的寄存器的值。接下来就是编写代码实现功能了,因为板子上有2颗ad5762与
2020-12-12 21:06:38
3108
1
原创 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
2324
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
4717
原创 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
1101
原创 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
13020
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
559
原创 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
1195
原创 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
777
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
3010
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
1414
原创 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
607
原创 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
355
1
原创 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
2114
原创 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
247
原创 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
485
原创 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
311
原创 PyQt5 pushbutton 学习
# pushbutton继承自QAbstractButton,但启动AutoRepeat之后,会按照一定周期自动发出pressed、released、clicked这3个信号,很多时候需要按住按钮来重复执行一个功能,松开按钮就停止执行,就可以通过如下代码实现# 设置自动重复执行功能和间隔时间self.btn_turnright.setAutoRepeat(True) self.btn_tur...
2020-03-30 21:12:27
949
原创 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
304
原创 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
2011
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
3529
原创 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
160
原创 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
4667
6
原创 C语言删除字符数组中的空格
一个删除字符数组中空格的功能,见代码#include <stdio.h>#include <string.h>#include <memory.h>void clearStringAllspace(char *s){ char *temp = s; while (*temp) { if(*temp != ' ' &...
2020-02-12 15:11:04
4690
原创 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
309
原创 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
205
原创 按键消抖
##按键消抖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
223
原创 将一条字符串拆分成数条并拷贝到指针数组中
#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
597
原创 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
295
ad5764 spi菊花链通信
2020-11-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人