
c语言
yrx020307
进阶
展开
-
基于寄存器配置实现的STM32F407VET6的flash操作
略。原创 2025-01-23 18:08:41 · 82 阅读 · 0 评论 -
基于寄存器配置实现的STM32F407VET6的硬件spi通信
略。原创 2025-01-23 18:03:46 · 128 阅读 · 0 评论 -
基于寄存器配置实现的STM32F407VET6的硬件iic通信
略。原创 2025-01-23 18:02:38 · 126 阅读 · 0 评论 -
基于寄存器配置实现的STM32F407VET6定时器中断
略。原创 2025-01-23 17:58:37 · 92 阅读 · 0 评论 -
基于寄存器配置实现的STM32F407VET6串口通信
略。原创 2025-01-23 17:55:05 · 78 阅读 · 0 评论 -
STM32F407寄存器点灯
背景描述:最近用32开发遇到问题不得不看寄存器了,就回顾了一下寄存器手册的查看方式和寄存器的使用方法;上一次这么细致的记录还是在刚学习STM32的时候,之前觉得看寄存器手册以及配置寄存器是有点难度的事情,现在回头看已经是轻舟已过万重山了。**言归正传:经常查看的是《STM32F407中文手册》,这个手册很重要!实验目的:GPIOA_pin6配置为“推挽输出模式+25MHZ”实现LED闪烁效果;业务流程:这是寄存器映射图这是GPIOA的基地址。原创 2024-12-18 15:14:44 · 773 阅读 · 0 评论 -
stm32f407VET6 can通信踩坑
2)如图,原理图上在mcu和TJA105连接时,使用0欧姆电阻;硬件工程师给我一块板子,并且和我说,板子上的can通信相关的部分都正常(线序,虚焊这些都没问题);但是硬件工程师没焊接这2个0欧姆电阻,导致mcu的can口信号给不到TJA1075!1)使用已经出货的版本的固件,烧录在这块板子上。(如果can通信有问题,那就是硬件导致的);1)TJA105要5V供电,但实际上没供电,导致TJA105不工作(硬件工程师说 画错了);1)在老版本代码上添加了can.c相关,也许有问题;原创 2024-05-22 11:51:06 · 536 阅读 · 0 评论 -
cubemx配置stm32f407VET6实现can通信
参考博客:https://blog.youkuaiyun.com/weixin_43362027/article/details/132716496。移植canopen的前提是can通信正常,现在添加一下can通信(先用标准帧,250K bit/S的波特率测试)项目上需要把原先的TMC5160电机驱动器替换为购买的电机控制模块(该模块采用canopen通信)3)实现can接收;我实现的业务逻辑是在can接收回调函数中串口打印接收到的can包。can1的时钟在APB1上,APB1的时钟为84MHZ;1)如何计算波特率?原创 2024-05-15 16:28:08 · 1458 阅读 · 1 评论 -
cubemx配置stm32f407VET6实现USB虚拟串口
5)配置USB_DEVICE为communication Device Class(CDC)第一步:在文件 usbd_cdc_if.c中 的 函数添加一行代码用于获取字符串长度;最近做项目需要使用USB,一根数据线连接“mcu的板子”和“电脑”;在usb_device.c中实现业务逻辑“USB数据回显函数”1)仅使用MCU的USB发送数据(注意波特率可以是任意值)电脑上的串口助手通过USB线和mcu的USB通信;接下来的方法是之前一个同事写的,我直接搬运一下;2)测试mcu的USB接收功能。原创 2024-05-15 13:33:37 · 911 阅读 · 0 评论 -
c语言补充知识----数组
C语言数组原创 2023-01-18 10:55:52 · 100 阅读 · 0 评论 -
结构体相关内容
一、定义1个结构体,为其赋值,打印1.写1个简单的结构体2.为结构体变量赋值时,字符串必须用字符串的函数来填充,不能直接赋值像这样写是错误的,会报错应该把 stu2.name = “dog1”;写成strcpy(stu2.name,“dog1”);以字符数组设置字符串时,字符串只有在初始化时,才可以直接赋值,其他时候必须strcpy以字符串指针设置字符串时,可以不适用strcpy像这样定义时赋初值,是可以直接赋值的而,先定义,再赋值是不行的对于字符串,一般还是需要先申请空间的3.原创 2022-06-04 18:25:53 · 221 阅读 · 1 评论 -
字符串相关知识
一、字符串简介和普通的字符串定义方式二、字符指针需要注意的是,指针方式如果操作不当,容易造成段错误(内存非法)三、字符串的长度四、计算字符串长度,用strlen通过上面的例子,可以发现sizeof()不能计算有效字符个数。所以用strlen()五、字符串常用的函数(1)定义,输入,输出字符串,空指针,申请空间,判断空间是否申请成功,将申请的空间全部设置为空字符像这样可以编译通过;因为申请了空间char str2[100] = {‘\0’};像下面这样不行因为定义了野指针,没原创 2022-06-02 18:28:17 · 268 阅读 · 0 评论 -
putchar与getchar
1.putchar()没什么可说的2.getchar()(1)从缓冲区读走一个字符,相当于清除缓冲区(2)前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误(3)getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)原创 2022-06-02 12:54:06 · 110 阅读 · 0 评论 -
puts()和gets()
gets() 和puts() 函数的应用1、gets() 的作用是从键盘上读取字符串,跟scanf() 相似,但又有所不同。gets() 函数的用法:gets(字符串的首地址);例:char str [20]; .gets(str);须要注意的是:(1) gets() 可以接收空格、Tab键, 碰到回车键输入才结束;而scanf碰到空格、回车、Tab键 都会结束输入。(2) gets() 和scanf() 都不能检测越界。2、puts() 的作用是 向显示屏输出字符串并换行。用法:puts (字原创 2022-06-02 12:41:33 · 877 阅读 · 0 评论 -
malloc的介绍和使用
不能像下面这样写printf(“第%d个学生的成绩:%d\n”,i,*(parry++));//这里不能这样写,为什么????????????????????原创 2022-06-01 22:25:34 · 222 阅读 · 0 评论 -
指针的相关内容
一、前面学过通过变量名访问变量指针则是通过 存放变量的地址 来访问变量二、不同类型的变量存放不同类型的内容整型变量 存放整型数字符型变量 存放字符指针变量 存放地址。。。。。。三、怎样定义一个指针变量1.定义指针变量并赋值的操作分2中或者***注意 * 只有在定义1个指针的时候,才是 指针的标识符。其他时候 * 是1个运算符,作用是 取出地址里的值。2.用指针访问变量3.不同类型指针,自增后占用的空间也不同可以看到 int型指针自增后,自增4字节char型指针自原创 2022-06-01 21:37:57 · 419 阅读 · 0 评论 -
数组的相关内容
一、数组的3种定义方式1.数组的数据是同类型的比如:array[0]~array[4]分别是1,2,3,4,5而不能将数组定义成2.数组可以先申请空间而不初始化比如:这个操作就是仅仅申请了6个整型数的空间。3.数组可以申请空间,进行不完整的初始化比如:这种不完整的初始化,是申请了100个整型变量的空间,数组的前3个元素分别被赋值为1,2,3,其他的元素分别被初始化为0二、数组的下标问题int array[5] = {1,2,3,4,5};那么数组的第1个元素是array[0],第2个元原创 2022-06-01 15:39:42 · 687 阅读 · 0 评论 -
函数的几种类型
1.无返回值,无参数2.无返回值,有参数3.有返回值,有参数4.有返回值,无参数5.有返回值,有多个同类型参数6.有返回值,有多个参数,参数类型不同7.根据需求设计的例1:无返回值,有参数#include<stdio.h>int fun(int x){ int y; printf("函数调用传递给子函数形参x的值 = %d\n",x); printf("子函数未赋初值的y = %d,y的地址 = %p\n",y,&y);}int main(){ int原创 2022-06-01 12:34:06 · 913 阅读 · 0 评论 -
函数局部变量和形式参数的异同点
作用域和生存周期一致。差异:形参的值取决于函数调用时传递的值,和该函数自身的运算。局部变量只受定义该局部变量的函数影响。#include<stdio.h>void fun_1(int cmd);void fun_2();main(){ printf("形参受传递给它的实参的影响\n"); fun_1(1); fun_1(2); printf("局部变量只受定义它的函数的影响\n"); fun_2();}void fun_1(int cmd)//形参{ print原创 2022-05-29 17:44:31 · 298 阅读 · 0 评论 -
函数局部变量和形式参数的异同点
作用域和生存周期一致。差异:形参的值取决于函数调用时传递的值,和该函数自身的运算。局部变量只受定义该局部变量的函数影响。....原创 2022-05-29 17:33:28 · 318 阅读 · 0 评论 -
函数形参作用域及生存周期(形参,局部变量的作用域和生存周期,其他函数能不能操作局部变量)
1.形参是一种局部变量,作用域仅限于该函数2.形参是一种局部变量,它有自己的空间(当函数被调用时,局部变量的空间被临时申请,同时这个空间的数据被赋值成实际参数的值)。当离开定义它的函数时,分配给他们的存储空间就被释放掉了。...原创 2022-05-29 17:13:29 · 1068 阅读 · 0 评论 -
c语言基础---结构体指针
!#include <stdio.h>#include <stdlib.h>struct student{int score;char name[128];};int main(){struct student stu1;stu1.score = 98;strcpy(stu1.name,“yrx”);printf(“score = %d,name = %s”,stu1.score,stu1.name);printf("\n");struct student原创 2021-08-22 16:14:03 · 147 阅读 · 0 评论