拿到nucleo板好几天了,一直没时间动手,前2天有时间看了一下,板型为nucleo_f302r8,c01,发现和我想的不太一样,原来是块可扩展核心板,需要外围电路才行,鉴于本人手头暂时没有蓝牙模块,就决定先熟悉板上自带功能吧,以前一直很纳闷,stm搞个VCP干啥,是不是可以用vcp和单片机做通讯呢?那就做个stlink的虚拟串口打印rtc时钟吧,本以为10秒钟搞定,下载完毕,运行,Ok,......,耶,不大对劲,没有数据上传,咋回事?是stlink的虚拟串口有问题吗?因为以前没有用过stlink的vcp功能,好,找块stm32f103通过串口发数据到nucleo的stLink的vcp,收到数据。 这说明vcp没问题,那就说明问题出在我的nucleo串口初始化上,好吧,我找,找,找。。。,终于被俺找到问题了,其中有个语句如下,5 Q( Z8 k5 q5 w* |2 b2 X5 p GPIO_PinAFConfig(GPIOA, GPIO_Pin_2, GPIO_AF_7); 但GPIO_PinAFConfig的原型是:void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF); 那就把第二个参数改为GPIO_PinSource2,既GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7). 重编,下载,run,去倒杯水,回到座位, 啊,怎么回事,还是没有显示? why? 好吧,程序尚未调通,码农仍需努力啊。调试发现,RTC_Config()中走到语句:4 F& \! n* M7 U while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {}/ q' X6 \. |/ t9 T! @ 就不动了,难道是LSE有问题?打开原理图,找到lse位号,拿起板一看,哟,这stm不是欺负人嘛,竟然没焊32.768KHz晶振,赤果果的欺负俺不懂硬件啊!5 R' [( h' e% ? q3 g; N @/ ^ 好,条条大路通罗马,没有lse, 哪咱就用lsi吧,改完代码,run,谢天谢地,终于见到串口在欢乐的打印数据了,一直不知道lsi精度,那就看看吧,拿来示波器,,不看不知道,一看吓一跳,1s的alarm中断在示波器上竟然是1.060s.7 |6 |! s8 v: t) e% a 看看lse精度吧,找来旧板子,拆个32768hz晶振焊上,(注意:我这块板上晶振边上的电容电阻都没焊),用示波器一看,那精度,整整1s,一分不多一分不少。0 V5 n8 |3 y8 F% i$ d; ` p . T* o. h- ~: o 本次经历给俺的经验总结如下: 1 : 以前不识货,没能领会VCP功能,只从有了VCP,再也不用担心笔记本电脑没有串口了! 2:还是外部晶振靠谱。 |
RE:【Nucleo板开发日志】----- 通过STLINK虚拟串口打印RTC时间
RE:【Nucleo板开发日志】----- 通过STLINK虚拟串口打印RTC时间