
STM32/STM8
填坑
初心不辜
这个作者很懒,什么都没留下…
展开
-
LL库实现正交编码器数据采集
我这里选择了定时器2和3,因为我有两个电机,在定时器模式这边,我们在Combined Channels这个选项里面我们选择Encoder Mode,其实主要就是选择这个。比如我们想实现M法测速,在单位时间读取CNT后然后清0CNT,以此往复就可以进行测速了。,配置一下工程,这里使用的芯片是STM32F103C8T6。然后直接读取定时器的CNT寄存器即可。然后计数值我们就填65535。然后在代码里使能定时器即可。输入滤波我们填个4即可。原创 2023-09-25 17:46:12 · 445 阅读 · 0 评论 -
LL库实现SPI MDA发送方式驱动WS2812
这里卡了一会,原因就是忽略了 LL_SPI_EnableDMAReq_TX(SPI1);函数,导致dma不发送。,在这里我们设置了外设地址和内存地址,然后打开了传世完成中断,这个在后面的传输中会用来检测是否传输完成。1,首先打卡STM32CubeMX,配置一下工程,这里使用的芯片是STM32F030F4P6。下载接口,这个不配置待会下程序后第二次就不好下载调试了。然后直接点击 General Code。下一步我们去填充数据就行了。原创 2023-08-17 14:28:22 · 1283 阅读 · 6 评论 -
AVR446步进电机加减速算法移植
最近产品主控换为国产芯片需要移植程序,正好用到步进电机加减速算法,在这里记录一下走过的坑一,遇到的问题1,无法匀速运行,加速完成后直接进去减速,也是下面这两个数据类型不匹配,计算出错了,需要将两个数据类型改为一样的,uint16_t // Holds next delay period. uint16_t new_step_delay; // Remember the last step delay used when accelrating. static uint16_t la...原创 2021-03-09 17:29:15 · 1579 阅读 · 0 评论 -
LL库实现定时器输出4路不同频率pwm(输出比较方法)
最近有用到定时器的输出功能,可以通过这个功能使1个定时器输出4路不同频率的pwm,这里做一下记录,防止以后自己忘记了。下面直接看初始化:这里我是使用定时器1通道1,也就是PA8引脚有了以上操作之后我们生成代码后还必须要手动添加使能代码: LL_TIM_CC_EnableChannel(TIM1,LL_TIM_CHANNEL_CH1); LL_TIM_EnableAllOutputs(TIM1); LL_TIM_EnableIT_CC1(TIM1); LL_TIM_EnableCo原创 2020-11-13 11:38:11 · 2468 阅读 · 0 评论 -
STM8S库文件读取IO输入引脚函数GPIO_ReadInputPin有问题
/** * @brief Reads the specified GPIO input data pin. * @param GPIOx : Select the GPIO peripheral number (x = A to I). * @param GPIO_Pin : Specifies the pin number. * @retval BitStatus : GPIO input pin status. */BitStatus GPIO_ReadInputPin(G.转载 2020-11-06 19:41:35 · 2052 阅读 · 0 评论 -
LL库实现硬件I2C读取磁编码器角度
今天偶然想到用硬件I2c来测试一下看看速度怎么样,听过ST已经将I2C的bug改掉了,下面就是测试代码。首先初始化,没什么看的。下面就是读取函数了,我是使用了一个磁编码器来读取角度。//返回值:0,错误uint8_t AS5600_ReadByte(uint8_t ReadAddr){ uint8_t Recev = 0; while(LL_I2C_IsActiveFlag_BUSY(I2C1) == SET); //判断总线是否空闲 LL_I2C_HandleTransfer原创 2020-08-21 17:58:40 · 2491 阅读 · 0 评论 -
LL库实现ADC多通道DMA读取
首先依旧使用STcubeMX配置一下工程我这里使用的是ADC1的多个通道,具体看下面配置图,比较简单,因为我使用了DMA,配置好ADC之后还需要配置一下DMA。1,ADC配置2,DMA配置,需要配置通道以及方向,是外设到内存还是内存到内存,以及缓存区数据宽度。3,配置好以上后,我们还需要手动添加外设地址以及内存地址等下面看代码: LL_DMA_SetDataLen...原创 2020-04-16 13:07:50 · 6366 阅读 · 5 评论 -
LL库实现定时器输入捕获
首先使用STcubeMX配置一下工程我这里使用的是定时器4的通道1同时也打开了更新中断,100ms中断一次有了以上配置我们还需要手动打开中断使能等操作,LL库没有为我们打开。 LL_TIM_ClearFlag_CC1(TIM4); LL_TIM_ClearFlag_UPDATE(TIM4); LL_TIM_EnableIT_CC1(TIM4); LL_TIM_Enabl...原创 2020-03-25 12:43:19 · 2781 阅读 · 4 评论 -
LL库实现STM32使用定时器主从模式输出指定数量脉冲
这里我使用的是定时器1发送脉冲,定时器4记录脉冲个数,所以定时器1工作在主模式,定时器4工作在从模式。定时器1主要是设置输出的触发事件,这里我们选择OC1REF这里需要注意一下,配置的时候定时器的arr不能设置为0,不然无法输出脉冲。先上定时器1配置图然后就是定时器4了因为使用的是从模式,所以在这里我们选择“外部时钟模式1”还要选触发源,这里我们选择“ITR0”,...原创 2020-03-21 00:32:57 · 3391 阅读 · 2 评论 -
STM32使用MCO引脚输出系统时钟
/* * 初始化MCO引脚PA8 * 在F1系列中MCO引脚只有一个,即PA8,在F4系列中,MCO引脚会有两个 */void MCO_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; // 开启GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ...转载 2018-12-13 12:51:11 · 10044 阅读 · 4 评论 -
STM32 HAL库学习 常使用的几种延时方式
1 自带的hal_delay 函数 毫秒级延迟void HAL_Delay(__IO uint32_t Delay){ uint32_t tickstart = HAL_GetTick(); //获取tick值(毫秒) uint32_t wait = Delay; /* Add a period to guarantee minimum wait */ if ...转载 2018-09-11 09:17:43 · 16272 阅读 · 2 评论 -
将一个十六位数分成两个八位数
高8位:(data >>8)&0xFF 低8位: (data&0xFF)原创 2018-08-25 15:03:02 · 7355 阅读 · 0 评论 -
STM32使用定时器产生PWM波
/* ---------------- PWM信号 周期 占空比的计算--------------- */// ARR :自动重装载寄存器的值// CLK_cnt:计数器的时钟等于 Fck_int / (psc+1) = 72M/(psc+1)// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR*(PSC+1) / 72M// 占空比P=CCR/(ARR+1...原创 2018-08-12 20:19:40 · 12310 阅读 · 0 评论 -
STM32的八种输入输出模式
(1) GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mo...原创 2018-06-23 19:16:07 · 2117 阅读 · 0 评论 -
STM32启动文件选择
- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices- startup_stm32f10x_ld.s: for STM32 Low density devices- startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices- st...原创 2018-06-23 18:26:37 · 1337 阅读 · 0 评论 -
软件模拟IIC
最近做平衡车的时候用到了IIC总线的知识,在这里就总结一下吧!1,IIC总线的连接IIC传输数据的时候只用其实只需要两根线,一根是“SCL”为时钟线,一根是“SDA”为数据线我们来看一下器件是怎么连接在IIC总线上的!可以看到,SDA和SCL都接了上拉电阻,在总线空闲的时候,SDA和SCL都应该为高电平,当总线上的任何一个器件输出低电平,那总线都将变为低电平。我们记住只要记住一条:IIC总线在进行...原创 2018-05-28 10:24:41 · 5736 阅读 · 7 评论 -
stm32USART使用(库函数)
1,定义GPIO端口、串口USART、中断NVIC初始化结构体。 2,打开相关外设时钟,串口1的时钟和引脚都在APB2总线上所以可以直接|操作,如下3,给GPIO结构体成员赋值,设置引脚功能,此处用的是USART1,Tx是PA9,Rx是PA10,我们要设置PA9为复用推挽输出,PA10为浮空输入。4,初始化GPIO端口之后我们就要配置中断分组和串口中断优先级,中断优先级分组只用设置一次。5,...原创 2018-04-11 12:47:28 · 3210 阅读 · 0 评论 -
使用STM32GPIO端口点亮LED灯(库函数)
1,先定义GPIO端口结构体 GPIO_InitTypeDef LED_GPIOA_InitStruct;2,使用GPIO端口指定要使用的结构体 LED_GPIOA_InitStruct.GPIO_Pin = GPIO_Pin_2; //指定第2引脚3,同上设置输出或...原创 2018-02-27 16:33:09 · 7130 阅读 · 0 评论