STM32F103C6T6初步学习

day1:1.烧录例程时,keil总是需要长按复位键才能下载,究其原因,是要把STMCubeMX切换为Serial Wire模式才可在keil中连续烧录。No Dugger 模式和Serial Wire分别对应不同的代码,导致效果不同

 2.按照微雪课堂的教程学习用GPIO_OUTPUT控制LED,并做成8颗LED的流水灯。

3.继续学习GPIO,按照教程程序编译失败,显示结构体和函数未定义,将定义搬到主函数后编译成功,但功能无法实现。

day2:1.查阅解决办法后发现是要将结构体和函数定义写在gpio.h头文件中,而不是gpio.c(我是伞兵),编译成功。

2.LED一直常量,是因为LED_OFF/ON函数分别对应了RSET/SET,这个正好为亮灭,修改后显示正常,长按常量,不按保持灭。

3.学习微雪第二节,利用外部中断,设置4个按键控制4种功能,此过程中,有许多库函数在CubeMX中不支持,需要具体了解。

day3:1.接触到基本定时器,对相关寄存器概念不熟悉,查阅相关资料。

Prescaler(PSC): 定时器预分频设置,用来设置TIMx_PSC的值,16位,设置 0~65535 以达到 1 至 65536 的分频。

Couter Mode : 定时器的计数方式,基本定时器只能向上(UP)计数(即TIMx_CNT只能从0开始递增,无须初始化)

Couter Period : 定时器周期,16位,设置 0~65535 以达到 1 至 65536 的周期。每当定时器达到 设定值时,置位。

APB2负责AD,I/O,高级TIM,串口1。

APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。

发生中断的时间=(PSC+1)∗(Period+1)/定时器的频率

  

 按照教程步骤下载调试后,发现只进入定时器中断2次后便不再进入,探索其原因。

找了很久后,发现需要对定时器TIM3放在while里重复使能,才能使灯正常亮灭,不知为何。

原因为TIM3中CR1寄存器里CEN位自动复位。

day4:1.CEN自动复位是因为错误配置为单脉冲模式,修改后恢复正常。

 

得出一些调试经验:1.设置断点,寻找出现问题的模块;

                                 2.查看相关寄存器和HAL库开发指南,找到错误的语句;

                                 3.修改语句或CubeMX的配置。 

2.配置定时器TIM1_channel1为PWM模式,对应引脚PA8,通过控制脉宽使LED亮度变化。

3.用debug对输出的PWM波进行查看,计算周期。

day5:学习串口通信,查询资料后发现硬件方面需要USB-TTL才能进行通信,安装虚拟串口也没有反应,该节先跳过。

同样,DMA也需要用到上述硬件,暂时跳过。

ADC也需要串口通信,了解到keil可以使用虚拟串口来进行串口通信。

先下载VSPD虚拟串口软件,再将KEIL配置为下图所示

 SARMCM3.DLL        -REMAP        SARMCM3.DLL

DARMSTM.DLL        -pSTM32F103C6        TARMSTM.DLL        -pSTM32F103C6

在debug里的command里键入 MODE COM3 9600,0,8,1

ASSIGN COM3 <S1IN>S1OUT(cubemx里用哪个串口就SxIN);

再打开串口软件(或者keil自带的UART#x窗口),配置相同,即可收到程序发送的信息。

版权声明:本文为CSDN博主「失心&者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jie_LJie_L/article/details/119647994

day1:1.烧录例程时,keil总是需要长按复位键才能下载,究其原因,是要把STMCubeMX切换为Serial Wire模式才可在keil中连续烧录。No Dugger 模式和Serial Wire分别对应不同的代码,导致效果不同

 2.按照微雪课堂的教程学习用GPIO_OUTPUT控制LED,并做成8颗LED的流水灯。

3.继续学习GPIO,按照教程程序编译失败,显示结构体和函数未定义,将定义搬到主函数后编译成功,但功能无法实现。

day2:1.查阅解决办法后发现是要将结构体和函数定义写在gpio.h头文件中,而不是gpio.c(我是伞兵),编译成功。

2.LED一直常量,是因为LED_OFF/ON函数分别对应了RSET/SET,这个正好为亮灭,修改后显示正常,长按常量,不按保持灭。

3.学习微雪第二节,利用外部中断,设置4个按键控制4种功能,此过程中,有许多库函数在CubeMX中不支持,需要具体了解。

day3:1.接触到基本定时器,对相关寄存器概念不熟悉,查阅相关资料。

Prescaler(PSC): 定时器预分频设置,用来设置TIMx_PSC的值,16位,设置 0~65535 以达到 1 至 65536 的分频。

Couter Mode : 定时器的计数方式,基本定时器只能向上(UP)计数(即TIMx_CNT只能从0开始递增,无须初始化)

Couter Period : 定时器周期,16位,设置 0~65535 以达到 1 至 65536 的周期。每当定时器达到 设定值时,置位。

APB2负责AD,I/O,高级TIM,串口1。

APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。

发生中断的时间=(PSC+1)∗(Period+1)/定时器的频率

  

 按照教程步骤下载调试后,发现只进入定时器中断2次后便不再进入,探索其原因。

找了很久后,发现需要对定时器TIM3放在while里重复使能,才能使灯正常亮灭,不知为何。

原因为TIM3中CR1寄存器里CEN位自动复位。

day4:1.CEN自动复位是因为错误配置为单脉冲模式,修改后恢复正常。

 

得出一些调试经验:1.设置断点,寻找出现问题的模块;

                                 2.查看相关寄存器和HAL库开发指南,找到错误的语句;

                                 3.修改语句或CubeMX的配置。 

2.配置定时器TIM1_channel1为PWM模式,对应引脚PA8,通过控制脉宽使LED亮度变化。

3.用debug对输出的PWM波进行查看,计算周期。

day5:学习串口通信,查询资料后发现硬件方面需要USB-TTL才能进行通信,安装虚拟串口也没有反应,该节先跳过。

同样,DMA也需要用到上述硬件,暂时跳过。

ADC也需要串口通信,了解到keil可以使用虚拟串口来进行串口通信。

先下载VSPD虚拟串口软件,再将KEIL配置为下图所示

 SARMCM3.DLL        -REMAP        SARMCM3.DLL

DARMSTM.DLL        -pSTM32F103C6        TARMSTM.DLL        -pSTM32F103C6

在debug里的command里键入 MODE COM3 9600,0,8,1

ASSIGN COM3 <S1IN>S1OUT(cubemx里用哪个串口就SxIN);

再打开串口软件(或者keil自带的UART#x窗口),配置相同,即可收到程序发送的信息。

版权声明:本文为CSDN博主「失心&者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jie_LJie_L/article/details/119647994

生成海报
点赞 0

失心&者

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32F103C6T6初步学习

day1:1.烧录例程时,keil总是需要长按复位键才能下载,究其原因,是要把STMCubeMX切换为Serial Wire模式才可在keil中连续烧录。No Dugger 模式和Seri

基于STM32的指纹密码锁

设计简介: 本设计是基于单片机的指纹密码锁,主要实现以下功能: 矩阵按键输入密码,并通过按键显示*号可通过按键或手机开门密码可通过按键进行开门可通过蓝牙模块连接手机进行开门可通过指纹进