完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前提
1.该笔记为本人学习时做的一些笔记,仅为个人学习只用,可能存在错误或缺陷 2.本人是在 正点原子 平台学习,具有大量视频,讲解清楚 一、GPIO 的操作步骤 1) 使能 IO 口时钟。 调用函数为 RCC_APB2PeriphClockCmd()。 2) 初始化 IO 参数。 调用函数 GPIO_Init(); 3) 操作 IO。 GPIO_SetBits()、GPIO_ResetBits ()等 二、串口usart **1) 串口时钟使能,GPIO 时钟使能; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE); 2) 串口复位; USART_DeInit(USART1);(一般不用) 3) GPIO 端口模式设置 GPIO_Init(); 4) 串口参数初始化; USART_Init(); 5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤); 接收中断:USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 发送结束中断:USART_ITConfig(USART1,USART_IT_TC,ENABLE); 6) 使能串口; USART_Cmd(USART1, ENABLE); 7) 编写中断处理函数; void USART1_IRQHandler(void) { }; 接收:USART_ReceiveData(USART1); 发送: USART_SendData(USART1,res); 三、外部中断 **1)初始化 IO 口为输入。 GPIO_Init();//设置为输入 2)开启 AFIO 时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 3)设置 IO 口与中断线的映射关系。 GPIO_EXTILineConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcex); 4)初始化线上中断,设置触发条件等。 EXTI_Init(); 5)配置中断分组(NVIC),并使能中断。 中断优先级分组:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);初始化NVIC: NVIC_Init(); 6)编写中断服务函数。 void EXTI3_IRQHandler(void){ } 四、独立看门狗 1)取消寄存器 写保护 (向 向 IWDG_KR 写入 0X5555); IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 2) 设置独立看门狗的 预 分频系数和重装载值; IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值 IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值 3) 重载计数值 喂狗 (向 向 IWDG_KR 写入 0XAAAA ); IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器 4) 启动看门狗(向 向 IWDG_KR 写入 0XCCCC); IWDG_Enable(); //使能 IWDG 五、窗口看门狗 1) 能 使能 WWDG 时钟; RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // WWDG 时钟使能 2) 设置窗口值和分频数; void WWDG_SetWindowValue(uint8_t WindowValue);//设置看门狗的上窗口值 void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); //分频值 3) )启 开启 WWDG 中断并分组; WWDG_EnableIT(); //开启窗口看门狗中断 4 ) 设置计数器初始值并 设置计数器初始值并; void WWDG_Enable(uint8_t Counter); 5 ) 编写中断服务函数; 六、定时器中断 1 )TIM3 时钟使能。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 2) 初始化定时器参数 数, 设置 自动重装值 , 分频系数 ,计数方式 等。 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitSture); //初始化定时器参数 3) 设置 TIM3_DIER 允许更新中断。 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); 4 )TIM3 中断 优先级。 NVIC_Init(); 5) 许 允许 TIM3 工作能 ,也就是使能 TIM3 。 TIM_Cmd(TIM3, ENABLE); //使能 TIMx 外设 6) 编写中断服务函数。 void TIM3_IRQHandler(void){ } 七、PWM 1) 开启 TIM3 时钟 以及复用功能时钟置 ,配置 PB5 为复用输出。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器 3 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE); //复用时钟使能 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 2)设置 TIM3_CH2 重映射到 PB5 上。 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 3) 初始化 TIM3, 设置 TIM3 的 的 ARR 和 PSC。 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化 TIMx 的 4) 设置 TIM3_CH2 的 的 PWM 模式能 ,使能 TIM3 的 CH2 输出。 TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC2 通道二 5) 使能 TIM3 。 TIM_Cmd(TIM3, ENABLE); //使能 TIM3 6)修改 TIM3_CCR2 来控制占空比。 TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); // 修改ccr2的值 八、输入捕获 1 )开启 TIM5 时钟和 和 GPIOA 时钟 ,置 配置 PA0 为下拉输入。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能 TIM5 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIOA 时钟 设置PA5的模式为下拉输入 2) 初始化 TIM5, 设置 TIM5 的 的 ARR 和 PSC 。 TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化 Tim5 3 )设置 TIM5 的输入比较参数,开启输入捕获 TIM_ICInit(TIM5, &TIM5_ICInitStructure); 4 )使能捕获和更新中断置 (设置 TIM5 的 DIER 寄存器) TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断和捕获中断 5)使能定时器置 (设置 TIM5 的 的 CR1 寄存器) TIM_Cmd(TIM5,ENABLE ); //使能定时器 5 6 )设置中断分组, NVIC_Init(); 7)编写中断服务函数 九、ADC 1)启 开启 PA 口时钟和 和 ADC1 时钟置 ,设置 PA1 为模拟输入。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE); //使能ADC和GPIOA外设时钟 GPIO_InitTypStru.GPIO_Mode=GPIO_Mode_AIN; //将是同ADC通道设置为模拟输入 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oGXaIeCN-1609641807177)(C:Users18264AppDataRoamingTyporatypora-user-imagesimage-20201004151059331.png)] 2)位 复位 ADC1 ,同时置 设置 ADC1 分频因子。 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子 ADC_DeInit(ADC1); //ADC时钟复位 3)化 初始化 ADC1 参数,置 设置 ADC1 的工作模式 以及规则序列的相关信息。 ADC_Init(ADC1, &ADC_InitStructure); //根据指定的参数初始化外设 ADCx 4)使能 ADC 并校准。 ADC_Cmd(ADC1, ENABLE); //使能指定的 ADC1 ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束 ADC_StartCalibration(ADC1); //开始指定 ADC1 的校准状态 while(ADC_GetCalibrationStatus(ADC1)); //等待校 AD 准结束 5) 读取 ADC 值。 ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的 ADC1 的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 ADC_GetConversionValue(ADC1); 转换值 读取 ADC 值。** ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的 ADC1 的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 ADC_GetConversionValue(ADC1); 转换值 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
640浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 13:39 , Processed in 0.912943 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号