<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_52399461的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_52399461</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_52399461]]></copyright><item><title><![CDATA[vi界面代码对其和移动]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/127709902</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/127709902</guid><author>m0_52399461</author><pubDate>Sat, 05 Nov 2022 22:01:52 +0800</pubDate><description><![CDATA[gg=G      //gg表示第一行，=表示对其，G表示最后一行，整体表示代码从第一行到最后一行全部对齐。命令行模式按v进入可视模式，选中代码段，shift + 是右移。]]></description><category></category></item><item><title><![CDATA[gcc -I -l -L的区别]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/126548377</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/126548377</guid><author>m0_52399461</author><pubDate>Fri, 26 Aug 2022 21:19:43 +0800</pubDate><description><![CDATA[L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录。]]></description><category></category></item><item><title><![CDATA[TCP三次握手四次挥手]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/126500831</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/126500831</guid><author>m0_52399461</author><pubDate>Wed, 24 Aug 2022 15:14:18 +0800</pubDate><description><![CDATA[TCP（Transfer control protocol）传输控制协议。]]></description><category></category></item><item><title><![CDATA[树莓派摄像头配置mjpg-streamer安装及使用]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/126484008</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/126484008</guid><author>m0_52399461</author><pubDate>Tue, 23 Aug 2022 15:37:22 +0800</pubDate><description><![CDATA[如果detected=0，说明摄像头模块没接好，重新排查下硬件。detected=1则说明CSI摄像头接入正常。supported=1说明摄像头已经使能，摄像头已经可以使用。supported=1则说明CSI摄像头没有使能。(3)修改vi start.sh将input_uvc.so修改为input_raspicam.so如下。然后打开浏览器，网址输入http://树莓派地址:8080(地址通过ifconfig查看)运行"sudo raspi-config"命令使能树莓派CSI摄像头，使能后重启。]]></description><category></category></item><item><title><![CDATA[Linux分文件编程]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/126162853</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/126162853</guid><author>m0_52399461</author><pubDate>Thu, 04 Aug 2022 17:05:15 +0800</pubDate><description><![CDATA[1 将需要的函数写在xx.c(不用到，无需添加任何头文件)文件，在xx.h(不用添加头文件)中声明函数。3 编译生成可执行程序gcc main.c xx.c。2 在主函数添加xx.h文件，然后调用函数。]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式uart串口通信]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124517307</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124517307</guid><author>m0_52399461</author><pubDate>Sat, 30 Apr 2022 19:51:33 +0800</pubDate><description><![CDATA[1，在cubeMX中配置，模式选择异步模式，波特率设置为9600，打开串口中断，然后生成代码。







//串口发送
char temp[10];
sprintf(temp,"Error\r\n");
HAL_UART_Transmit(&amp;huart1,(uint8_t *)temp,strlen(temp),50);	//50是超时时间



//写之前先添加usart.h，串口中断回调函数，每次中断只能接收一个字符,使用之前必须在主函数中先打开串口中断
char rxdata[40];	.]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式IIC通信-eeprom读写]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124505332</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124505332</guid><author>m0_52399461</author><pubDate>Fri, 29 Apr 2022 23:33:30 +0800</pubDate><description><![CDATA[1，先查手册，可以看到24C02连接的是PB6,PB7引脚。

2，在cubeMX配置引脚，选择output模式(因为官方会给软件IIC的库所以配置引脚就可以了)。

3，对官方库的文件进行移植，把这两个文件复制到自己的文件夹并在keil中添加。

4，i2c - hal.c中写读写函数。


//读函数
uint8_t eeprom_read(uint8_t addr)
{
	uint8_t dat;
	I2CStart();		//¿ªÆôIIC
	I2CSendByte(0xa0);		//ÁªÏµÐ]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式ADC测量电压]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124434818</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124434818</guid><author>m0_52399461</author><pubDate>Tue, 26 Apr 2022 19:31:33 +0800</pubDate><description><![CDATA[1，先看官方给的手册，PB15和PB12分别和两个可调电阻相连。



2，配置引脚为ADC输入。



3，左侧找到Analog。分别配置ADC1和ADC2选择Single-dened。





4,到这里已经配置完成，生成代码即可。

5，新建两个文件，badc.c badc.h。


//.c文件
#include "badc.h"

double getADC(ADC_HandleTypeDef *pin)
{
	uint adc;
	HAL_ADC_Start(pin);        //..]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式定时器输入捕获(频率，占空比测量)]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124412323</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124412323</guid><author>m0_52399461</author><pubDate>Tue, 26 Apr 2022 18:59:45 +0800</pubDate><description><![CDATA[这里是测开发板自带的信号发生器的频率。



1.在cubeMX中配置引脚，分别选择定时器2的通道1和定时器3的通道1。



使能定时器通道作为输入模式。

3，分频系数(psc)80-1，ARR默认就可以。

4，NVIC中使能中断。

5，生成代码。

6，在interrupt中写中断回调函数。






...]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式定时器输出PWM(可调占空比)]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124390620</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124390620</guid><author>m0_52399461</author><pubDate>Sun, 24 Apr 2022 22:08:58 +0800</pubDate><description><![CDATA[功能要求



100Hz指的是定时频率不是定时器工作频率 。

定时器工作频率 = 外部总线频率 / （PSC + 1）；

定时频率 （PWM波的频率）=定时器工作频率 / (period + 1) = 外部总线频率 / (（PSC + 1）*(period + 1))；

PA6引脚选择TIM16_CH1,PA7选择TIM17_CH1

在左边Timers找到TIM16先使能再选择PWM输出通道1，PSC设为8000-1，period为100-1。







设置初始占空比20%



...]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式定时器-长按键及界面切换]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124389560</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124389560</guid><author>m0_52399461</author><pubDate>Sun, 24 Apr 2022 19:56:26 +0800</pubDate><description><![CDATA[根据上个文章修改


//在结构体中添加两个变量
struct keys
{
	uchar judge_sta;	
	bool key_sta;		//按键状态
	bool single_flag;	//短按键
	bool long_flag;     //长按键
	uint key_time;      //计时
};

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim-&gt;Instance == TIM4)
]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式定时器-按键单击]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124384006</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124384006</guid><author>m0_52399461</author><pubDate>Sun, 24 Apr 2022 18:43:03 +0800</pubDate><description><![CDATA[先说一下思路：在手册里可以看到





引脚是和VDD相连的所以没按下引脚是高电平，按下就是低电平。这里我们需要检测按键有没有被按下，就需要配置定时器中断每隔一段时间扫描按键。

把需要的引脚设置为输入模式（GPIO_Input),然后模式设置为上拉模式



参考手册76页

找到Timers配置TIM4

时钟源选择内部时钟。点击设置psc和arr



因为总线频率是80MHz，所以就是10ms扫描一次。

在NVIC中把中断使能

生成代码。

新建interrupt.c和.h文件。编译一...]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式LCD液晶屏显示]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124382763</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124382763</guid><author>m0_52399461</author><pubDate>Sun, 24 Apr 2022 15:21:24 +0800</pubDate><description><![CDATA[这个不用我们自己写，官方给了完整的工程，我们需要的文件就在这个路径里。需要移植到自己的文件夹。

\赛点资源数据包_ES\2-新版竞赛平台\5-液晶驱动参考程序\HAL_06_LCD

这里我们直接调库就可以，不用在cubeMX中配置引脚，库已经帮我们配置好了。

\HAL_06_LCD\Inc 把fonts.h和lcd.h添加到自己的文件夹。

\HAL_06_LCD\Src 把lcd.c添加到自己的文件夹。

在main.c中添加


#include "lcd.h"
#include "stdio.h]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式M4板点灯]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124381550</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124381550</guid><author>m0_52399461</author><pubDate>Sun, 24 Apr 2022 14:43:20 +0800</pubDate><description><![CDATA[先看产品手册



找到LED灯对应的引脚在cubeMX中一 一配置为输出模式



这边要注意PD2引脚为锁存器也要配置为输出模式。

System Core中点击GPIO。PC8到PC15全选，配置为High,这样就默认关闭灯。



PD2就不用动了，它是高电平使能，低电平关闭。

然后再新建的文件夹中建立led.h和led.c,这里还要记得包含路径。



在main.h中定义两个类型，方便使用


#define uchar unsigned char
#define uint unsigned ]]></description><category></category></item><item><title><![CDATA[蓝桥杯嵌入式M4板的cubeMX配置及工程建立]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/124377978</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/124377978</guid><author>m0_52399461</author><pubDate>Sun, 24 Apr 2022 11:35:44 +0800</pubDate><description><![CDATA[在Part Number 输入芯片名，STM32G431RB,在右下选择LQFP64封装，点击右上角Start Project

选择好芯片后，选择Pinout,左边SystemCore点击RCC打开高速时钟，选第三项。



然后会发现有两个引脚被使能，就配置成功了。

打开时钟配置(Clock Configuration)



这是已经配置好的，有4个地方需要配置。

先设置外部输入时钟频率24，芯片手册可以看到 这个晶振是24MHz。



然后选择HSE外部高速时钟。选择HCCLK，设置HCLK为]]></description><category></category></item><item><title><![CDATA[Keil5用固件库建立工程]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/123972990</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/123972990</guid><author>m0_52399461</author><pubDate>Tue, 05 Apr 2022 19:57:43 +0800</pubDate><description><![CDATA[先在ST官网下载固件库
	打开文件
	
	新建project文件夹，并在里面新建三个文件夹，CMSIS（存放内核函数及启动引导文件），FWLIB（存放库函数），USER（存放用户自己的函数），如图。
	
	这里主要用到Librarise和Project两个文件夹。将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中的文件复制到CMSIS中，再将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSI]]></description><category></category></item><item><title><![CDATA[Linux 切换目录(cd的使用)]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/121321277</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/121321277</guid><author>m0_52399461</author><pubDate>Sun, 14 Nov 2021 18:43:25 +0800</pubDate><description><![CDATA[cd命令是”change directory”中单词的首字母缩写，其英文释义是改变目录，所以该命令的功能是从当前目录切换到指定目录。

其中目录的路径可分为绝对路径和相对路径。若目录名称省略，则切换至使用者的用户目录(也就是刚登录时所在的目录)。

另外，“~”也表示为用户目录的意思，“.”则是表示目前所在的目录，“..”则表示当前目录位置的上一级目录。

语法格式：cd [参数] [目录名](注意：cd和参数之间要加空格)

使用“cd ~ ”(cd空格~)命令可以直接切换到当前用户目录，而“cd .. ]]></description><category></category></item><item><title><![CDATA[Linux线程(函数)]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/121303095</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/121303095</guid><author>m0_52399461</author><pubDate>Sat, 13 Nov 2021 13:06:58 +0800</pubDate><description><![CDATA[多线程开发在 Linux 平台上已经有成熟的 pthread 库支持。其涉及的多线程开发的最基本概念主要包含三点：线程，互斥锁，条件。其中，线程操作又分线程的创建，退出，等待 3 种。互斥锁则包括 4 种操作，分别是创建，销毁，加锁和解锁。条件操作有 5 种操作：创建，销毁，触发，广播和等待。其他的一些线程扩展概念，如信号灯等，都可以通过上面的三个基本元素的基本操作封装出来。



　1. 线程创建


#include &lt;pthread.h&gt;
int pthread_create(pthrea]]></description><category></category></item><item><title><![CDATA[char * 和const char *的区别]]></title><link>https://blog.youkuaiyun.com/m0_52399461/article/details/121114798</link><guid>https://blog.youkuaiyun.com/m0_52399461/article/details/121114798</guid><author>m0_52399461</author><pubDate>Wed, 03 Nov 2021 09:47:13 +0800</pubDate><description><![CDATA[一、含义的不同

char* 表示一个指针变量，并且这个变量是可以被改变的。

const char*表示一个限定不会被改变的指针变量。

二、模式的不同

char*是常量指针，地址不可以改变，但是指针的值可变。

const char*是指向常量的常量指针，地址与值均不可变。

三、指针指向的内容的不同

char*指针指向的内容是可以改变的，是不固定的。赋值后在数据传递的过程中允许改变。

const char*指针指向的内容是固定的，不可改变的。对传入的参数，不会对指针指向的内容进行修改

四、意义]]></description><category></category></item></channel></rss>