STM32
文章平均质量分 76
D.luffy
这个作者很懒,什么都没留下…
展开
-
STM32 HAL库的中断接收HAL_UART_Receive_IT 怎么用
因为HAL库都封装好了,如果想用中断接收,不能在中断里直接读RXD寄存器。第一步,初始化时使能串口中断MX_USART2_UART_Init(); if (HAL_UART_Init(&huart2) != HAL_OK) HAL_UART_MspInit(huart); ...... HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ原创 2021-11-12 16:33:13 · 24219 阅读 · 5 评论 -
stm32自定义printf,使用DMA打印
1、初始化的时候初始化DMA和DMA发送完成中断,串口中断我用的是STM32G031G8U6,所以用的是串口2,为什么要串口中断。是因为DMA发送完成中断的回调函数UART_DMATransmitCplt,已经在底层定义好。并不是定义为弱函数给用户重新定义。在DMA发送完成中断中,会触发串口发送完成中断TC, 串口发送完成中断的回调函数是给用户用的2、定义一个全局变量用来指示DMA发送完成,初值为1表示发送完成并且包含stdarg.h 文件3、定义myprintfint myprintf原创 2020-12-21 09:32:28 · 4103 阅读 · 4 评论 -
STM32怎么利用串口空闲中断进行DMA接收
一、在底层中初始化DMA接收和串口中断void MX_USART1_UART_Init(void) HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)     HAL_UART_MspInit(UART_HandleTypeDef* uartHan...原创 2020-04-09 10:19:49 · 957 阅读 · 0 评论 -
移植正点的printf
远程仓一、用STM32CubeMX生成基本MDK工程 生成工程时,需要使能三个中断和2个初始化,中断优先级要大于51、DMA接收中断2、DMA发送中断3、串口中断4、初始化一个二值信号量uart2_busy, 只有等到该信号量时,才能使用串口。使用串口DMA发送,在发送完中断中,释放该信号量。定义一个消息队列,txQueue, 需要发送的atkp_t类型数据包先发送到这个队列里...原创 2020-04-09 09:55:52 · 343 阅读 · 0 评论 -
STM32F103C8T6 ADC
https://blog.csdn.net/apple_2333/article/details/96962574原创 2020-03-19 14:41:30 · 17289 阅读 · 0 评论 -
HAL_I2C_Mem_Write与HAL_I2C_Master_Transmit
功能:在阻塞模式下将大量数据写入特定的内存地址HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)参数...原创 2019-11-25 18:28:17 · 39910 阅读 · 7 评论 -
STM32 FreeRTOS的osThreadDef创建任务
一、osThreadDef是一个宏定义#define osThreadDef(name, thread, priority, instances, stacksz) \const osThreadDef_t os_thread_def_##name = { #name, (thread), (priority), (instances), (stacksz) }所以osThread...原创 2019-07-10 14:27:37 · 24453 阅读 · 1 评论 -
C语言--enum,typedef enum 枚举类型详解
转载:https://www.cnblogs.com/yaowen/p/4785342.htmlC语言详解 - 枚举类型注:以下全部代码的执行环境为VC++ 6.0在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#de...转载 2019-06-21 13:34:40 · 7841 阅读 · 0 评论 -
sourceinsight 3.5相对路径
1、先按绝对路径设置工程,添加代码2、保存工程, 然后把路径改为相对路径3、关键一步,重新建立工程完成,以后把文件复制到其它地方也能用了...转载 2019-05-14 10:01:20 · 1168 阅读 · 0 评论 -
正点原子MiniFly V1.2学习笔记五---sensorsTask
这集学习第8个任务sensorsTask,2,3,6,7任务后面再学,先学重要的。 xTaskCreate(sensorsTask, "SENSORS", 450, NULL, 4, NULL); //传感器处理任务一、任务函数void sensorsTask(void *param){ sensorsInit(); //-------1初始化传感器 vTaskDelay(15...原创 2019-07-05 17:49:40 · 1092 阅读 · 1 评论 -
正点原子MiniFly V1.2学习笔记六---stabilizerTask
这集学习第8个任务sensorsTask,2,3,6,7任务后面再学,先学重要的。 xTaskCreate(sensorsTask, "SENSORS", 450, NULL, 4, NULL); //传感器处理任务一、任务函数void sensorsTask(void *param){ sensorsInit(); //-------1初始化传感器 vTaskDelay(15...原创 2019-07-16 13:20:31 · 1455 阅读 · 5 评论 -
正点原子MiniFly V1.2学习笔记七---configParamTask
第6个任务,优先级1,最低优先级。配置参数任务 xTaskCreate(configParamTask, "CONFIG_TASK", 150, NULL, 1, NULL);一、全局参数configParam1、参数定义 参数configParam前面没有static, 它是一个全局变量。有h文件中定义为外部变量,然后其它文件只要包含该h文件,就可以使用该变量。2、什么地...原创 2019-07-31 19:27:42 · 1000 阅读 · 2 评论 -
STM32F10X PWM没有输出
一、使用方法 之前已经有一个工程,想增加PWM功能。于是STM32CubeMX生成PWM程序,然后把生成的初始化程序复制到原来的工程中。 在新生成的工程中,有PWM输出,复制到老的工程没有输出。二、现象1、没有PWM输出到IO脚2、软件仿真发现时钟没走,如下图:三、原因所在没有开时钟以前作为定时器使用时,有msp.c中也有以下重定义...原创 2019-07-19 23:35:10 · 1924 阅读 · 0 评论 -
STM32 串口DMA,非中断发送,接收。
DMA有几个通道,每个通道都有一组寄存器,下面就以串口发送通道来解释初始化:主要设置CCR寄存器1、数据传输方向2、循环模式------是否循环操作3、外设地址增量4、内存地址增量5、外设数据宽度 8位,16位还是32位6、内存地址宽度7、通道优先级8、是否是 存储器到存储器------复位后为0,表示外设与存储器通信,所以HAL这位不设置对应的hal库代码 /...原创 2019-09-18 15:40:01 · 2127 阅读 · 0 评论 -
串口的接收与发送
1、等待查询等待方式void Usart_Send_Char(unsigned char *c,uint32_t cnt)//把发送数据的指针和个数传入,然后直到发送完才退出{ while(cnt--) { USART_SendData(USART1, *c++); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE...原创 2019-03-15 15:55:32 · 3486 阅读 · 0 评论 -
STM32 I2C
1、有四种模式● 从发送器模式● 从接收器模式● 主发送器模式● 主接收器模式原创 2019-05-06 14:09:43 · 1225 阅读 · 0 评论 -
stm32 HAL库怎么得到外设频率的HAL_RCC_GetPCLK1Freq()
当需要知道外设频率的时候,调用下面的函数得到/* Get PCLK1 frequency */ pclk1 = HAL_RCC_GetPCLK1Freq();从上面的时钟树知道,外设时钟为 HCLK 除以 PPRE1分频器SystemCoreClock即HCLK在stm32f1xx.c 中被宏定义,在stm32f1xx.h中定义为外部变量extern uint32_t SystemC...原创 2019-05-06 09:22:07 · 5535 阅读 · 1 评论 -
时钟芯片S35390A
1、内置有自由寄存器,相档于EEPROM, 用户写入自己的数据,断电后,下次再通电能读出数据。读取的顺序为:先发一字节指令-------->再写/读出数据 (可能是1字节,也可能是多字节的数据)通信格式:状态寄存器1状态寄存器2中断寄存器INT1 INT2报警寄存器,各有三个字节,每个字节的最后1位B0为1时表示该字节有效。三个字节分别用于设置星期、时、分。...原创 2019-04-29 15:23:20 · 2924 阅读 · 0 评论 -
STM32F103C8 仿真查看IO
参考:http://www.51hei.com/bbs/dpj-44354-1.html改为下面的:DARMSTM.DLL-pSTM32F103C8TARMSTM.DLL-pSTM32F103C8原创 2019-03-20 15:14:32 · 1620 阅读 · 0 评论 -
PID 的C语言实现:
1、位置型PID的简单实现/*定义结构体*/ typedef struct { float setpoint; //设定值 float Kp; //比例系数 float Kd; //积分系数 float Ki; //微分系数 float integral;//积分值 fl...原创 2019-03-16 14:03:23 · 17358 阅读 · 1 评论 -
STM32 JTAG脚用作IO
STM32F103C8T6 的PB3 PB4 PA13 PA14 PA15 是JTAG引脚,PA13,PA14又是SW引脚,如果要用作IO,需要在使用前把它改为IO功能 __HAL_AFIO_REMAP_SWJ_NOJTAG();// 改变指定引脚映射GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP禁用,SW使能 /*Configure GPIO pi...原创 2019-03-11 17:42:30 · 614 阅读 · 0 评论 -
STM32F103C8T6 串口IAP
1、首先要知道103C8T6是 64K flash的2、要知道每页是1K, 0x400表示1K, 0x1000表示4K, 0x4000表示16K,0x10000表示64K3、下载官方AN4657-STM32Cube_IAP_using_UART程序,STM3210C_EVAL工程4、修改flash_if.h文件#define USER_FLASH_END_ADDRESS ...原创 2019-03-11 17:05:40 · 2552 阅读 · 1 评论 -
ARM 调试时的DIsassembly窗口的汇编,LDR, MOV,STR
1、ARM是RISC结构,数据从内存到CPU(寄存器)之间的移动LDR/STR指令。LDR r0, 0x12345678 就是把0x12345678这个地址中的值存放到r0中。LDR r0,[pc,#48]; 从pc+48存储器取出数据—>存到r0中2、STR r0,[r1,#0x00] 将r0中的数据写入 r1+0x00 的存储器中3、MOV r0,#0x1...原创 2019-03-15 09:17:32 · 4244 阅读 · 0 评论 -
STM32CubeMX 生成的程序不能用 SW仿真调试
今天用STM32CubeMX生成一个程序,用SW调试两步就死机,最后查出是初始化中禁止了SW,这可能是STM32CubeMX中没有配置SW的原因吧把以下屏蔽后正常HAL_Init();------>HAL_MspInit();---------->__HAL_AFIO_REMAP_SWJ_DISABLE();...原创 2019-03-15 08:46:44 · 2900 阅读 · 0 评论 -
STM32F103用STM32cubeMX 生成的I2C代码BUG
这两天搞读写AT24C16,I2C引脚没有信号输出,最后查出是初始化代码有问题。下面是生成的初始化代码void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c){GPIO_InitTypeDef GPIO_InitStruct;if(hi2c->Instance==I2C2){/* USER CODE BEGIN I2C2_MspInit 0 *...原创 2019-03-07 13:53:31 · 2777 阅读 · 3 评论 -
STM32Cube 通用定时器
一、时钟树当APB1或APB2的时钟分频数为1的时候,定时器时钟就为PCLK1/PCLK2时钟。分频不为1的时候,定时器时钟为PCLK1/PCLK2的2倍。二、一些概念影子寄存器:一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器)输入滤波机制...原创 2019-03-20 16:14:21 · 1928 阅读 · 0 评论 -
python 生成一个周期的正弦数据
import mathi=0list1=[] #定义一个空listwhile(i<360): list1.append(i) #把数据增加到列表末 i=i+3.6; #因为我要一个周期里有100个点,所以点间距为3.6度#以上生成了100个点的角度数据list2=[x*math.pi/180 for x in list1] #把角度转成弧度list3=...原创 2019-04-27 21:04:03 · 5473 阅读 · 0 评论 -
->指针运算符和 .
->指针运算符. 成员符号当定义了一个结构体,和一个结构体变量/*定义结构体*/ typedef struct { float Kp; //比例系数 float Kd; //积分系数 float Ki; //微分系数 }PID;PID moto;写初始化函数, 这里必须用-> 指针运...原创 2019-03-26 17:35:56 · 1440 阅读 · 0 评论 -
理解STM32定时器中的输入捕获滤波器
转载:http://bbs.21ic.com/icview-335440-1-1.html关于STM32定时器中的输入捕获滤波器的功能描述,在中文参考手册中描述如下:我不理解官方的说明,在网上搜了老半天,基本都是下面这几句话:1)当滤波器连续采样到N次个有效电平时,认为一次有效的输入电平。2)该数字滤波器实际上是个事件计数器,它记录到N个事件后会产生一个输出的跳变。例如:当f(CK_I...转载 2019-03-26 16:49:23 · 10556 阅读 · 5 评论 -
STM32 输入捕获
一、什么是输入捕获定时器的计数器CNT在不停地计数,当选定的输入引脚上出现了设定的 上升沿或下降沿时,把CNT的值记录到CCR中。二、框图三、流程图引脚输入信号到输入通道TI1对输入信号进行滤波和边缘检测1个输入通道可以进入两个捕获通道IC1 IC2分频器 对输信号分频当发现设定的边缘时,把计数器CNT的值锁存到CCR中,并产生中断标志,在SR中滤波需要对进入定时器的频率分频CR1 的C...原创 2019-03-22 17:54:44 · 1189 阅读 · 0 评论 -
printf 的宏定义版本
转载:https://blog.csdn.net/cp1300/article/details/7773239前言:----我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:#define __...转载 2019-03-18 15:04:37 · 1019 阅读 · 0 评论 -
STM32串口+freeRTOS+DMA+先进先出队列+动态内存申请
动态内存申请:就是我需要用的时候,再开辟一段内存。比如在程序中需要把数据uint8_t a[1,2,3], 复制给另一个数组,那就要创建创建另一个数组,需要3个字节内存, 那就临时申请3个字节,使用完后又把这3个字节释放。**1、节点:**队列里的一个数据块,类似FreeRTOS的任务控制块。数据结构如下:2、队列:N个节点连接起来如果我们要往串口发送数据。1、printf(“thi...原创 2019-03-18 10:50:11 · 6535 阅读 · 1 评论 -
STM32F103C8--用STM32CubeMX生成PWM程序
一、配置定时器为PWM产生二、配置时钟树三、定时器配置四、配置完生成程序后,主程序里还要进行启动PWM就可以了 MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);//启动。置1 CCER的输出使能位bit4 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//CC...原创 2019-03-21 12:32:06 · 6554 阅读 · 2 评论 -
STM32 flash
Flash 有以下几个寄存器,在地址0x40022000开始上锁:设置 CR的bit8位为1解锁:往KEYR连续写入KEY1,KEY2原创 2019-03-08 17:59:24 · 2610 阅读 · 0 评论