推荐阅读最新更新时间:2024-03-16 16:24
STM32 PWM的输出与Keil软件仿真
STM32 PWM的输出 脉冲宽度模式(PWM模式)可以用来产生一个由TIMx_ARR寄存器确定平率,由TIMx_CCRx寄存器确定占空比的信号。在STM32开发中,由于官方提供了较为完善的库函数,使得我们的开发工作变得相当的轻松,甚至可以在不需要太多了解硬件结构的条件下,完成我的开发工作,实现我们所需要的功能。在此,笔者也建议大家,在初学的时候尽量去熟悉固件库中提供的函数来调节PWM的频率和占空比,对底层寄存器的操作应尽量减少。 本文使用的STM32F103RB的芯片,输出通道是TIM2_CH2通道,STM32有较强的可移植性,如果读者的芯片类型跟我不一样,可以做适当的修改,完成自己的开发。 使用到的库函数有: s
[单片机]
STM32使用SWD进行调试
硬件环境: stm32f103vet6,JLink_v8 软件环境: Keil_MDK 调试过程: 首先是要连接线路,使用JLink_v8 需要连接5跟线,分别是VCC,nJTRST,SWDIO,SWCLK;但是nJTRST可以不连接,但是在设置的时候会有所不同,要在设置界面里把RESET方式选择成自动,或者其他的,但是一定不能选择硬件复位,因为这个脚没有连接无法使用硬件复位,但是在仿真的时候也可以产生复位,那是因为可以模拟软件复位。所以这个脚可以不用连接。 下面是连接图: 下面是在MDK里设置的图片: ================================================
[单片机]
STM32通过DMA采集多通道AD
环境: 主机:XP 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 通过脚PA1,PA2采集AD。每路AD采集10次。 源代码: #include ad_driver.h //全局变量 //AD采样存放空间 __IO uint16_t ADCConvertedValue ; //函数 //初始化AD void init_ad(void) { ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; GPIO_InitTypeDef GPIO_Ini
[单片机]
STM32内部时钟设置-寄存器版
同时要记得把延时初始化函数设置好 1 //系统时钟初始化函数 2 //pll:选择的倍频数,从2开始,最大值为16 3 //pll:选择的倍频数,这里使用内部时钟,PLL为4就是4分频 4 void Stm32_Clock_Init(u8 PLL) 5 { 6 unsigned char temp=0; 7 MYRCC_DeInit(); //复位并配置向量表 8 // RCC- CR|=0x00010000; //外部高速时钟使能HSEON 9 RCC- CR|=0x00000001; //内部高速时钟使能HSEON 10 11 // while(!(RCC- CR
[单片机]
如何用外设复位修改只读寄存器
有STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC[7:0]和TEC[7:0]两个字段来体现,CAN硬件会根据错误数据大小做适当响应或处理。 根据寄存器描述得知,TEC[7:0]和REC[7:0]的值在这个寄存器里面是只读的。而此时的STM32用户有个强烈的需求,就是期望能适时地对这两个出错记录字段做清零。他自己也尝试编写一些代码想让二者清零,均以失败告终,便邮件咨询有无解决办法。 我们在阅读CAN_ESR寄存器内容时倒有个发现,即该寄存器的复位值是0x00000000。 也就是说
[单片机]
STM32通过GPRS与服务器建立TCP连接
u16 USART3_CGREG_Cnt; u8 USART3_Task_Cnt; //task_GPRS为GPRS处理任务,每50ms~200ms调用一次 void task_GPRS() { switch(USART3_Task_Cnt) { case 0: // SendUartStr( case0 ,1); if(GprsState.bits.Timeout == true) { GprsState.Flag =0x00000000; { GPIO_InitTypeDef GPIO_InitStructure;
[单片机]
stm32 通用定时器 精确延时程序
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructure.TIM_Period = 1; //自动装载 TIM_TimeBaseStructure.TIM_Prescaler = 7200; //72M分频率到10KHz TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down; //向下计数 TIM_TimeBaseInit(TIM2, &TI
[单片机]
RCC—使用 HSE HSI 配置时钟树梳理(在STM32平台下)
解剖RCC框图——时钟树(参考了火哥的使用手册和网上的一些资料,加上自己的理解) 下面是STM32F429的时钟树: 理解STM32的时钟是我们应用定时器等等的基础,首先 ,从系统时钟说起。 1.首先注意图中打蓝色圈的两个地方,HSE和HSI分别是外部时钟和内部时钟,其中HSE是高速的外部时钟信号,可接石英/陶瓷谐振器,或者接外部时钟源,HSE也可以直接做为系统时钟或者 PLL 输入(从蓝圈9处可以看出),频率范围为 4MHz~26MHz。HSE 我们使用的25M 的无源晶振。所以移植时一定要格外注意。 2.注意看图中蓝圈7的部分,这里是主锁相环倍频输出,用于产生系统需要的高速时钟信号,如图绿色箭头所示(STM32还有
[单片机]