本帖最后由 the_ether 于 2013-3-10 16:25 编辑
先献上原理图以及PCB一份。
光立方控制卡1.0.pdf
(1.05 MB, 下载次数: 28)
问题一、能够使用串口下载程序、用JLINK采用SW或者JTAG下载也行,但是为什么程序不能正常运行,比如控制PB5输出高电平,而实际用万用表测得的数据位0.6~1.3V左右?
答案:
HSE外部高速时钟的起震容值选择有错,后来用了22PF的,而且我的两片电容不是紧靠晶振,下次得注意,系统就可以正常运行,输出高就是高,输出低就是低。
问题二、为什么我没有初始系统时钟,配置的管脚依然有输出,高低且能控制。
答案:我猜测了一下,应该是STM32中文参考手册中的这句话:
问题三、蜂鸣器到底是怎样的接口电路才正确
答案:我还没有查相关资料,但是我硬件实验出来的结果如下:
这样,蜂鸣器是不能正常工作的,后来,我把三极管去掉,把1K电阻也去掉,220欧电阻也去掉,直接弄成
我就能正常控制蜂鸣器了,虽然不知道为什么,但是功能达到了,望各位大哥解释一下。
问题四、难道是程序编得太复杂了,都不正常工作了?
附两段配置IO的程序,第一段中的出来BUZZER的管脚都能正常控制,BUZZER就不行,只能将配置BUZZER的程序放到主函数中,它就能被正常控制
- void LED_Init(void)
- {
- RCC->APB2ENR|=1<<3; //ʹÄÜPORTBʱÖÓ
- RCC->APB2ENR|=1<<4; //ʹÄÜPORTCʱÖÓ
- RCC->APB2ENR|=1<<5; //ʹÄÜPORTCʱÖÓ
- //ÐпØÖƶ˿ÚÅäÖÃ
- GPIOB->CRL&=0XFF0FFFFF;
- GPIOB->CRL|=0X00300000;//PB5 ÍÆÍìÊä³ö
- GPIOB->ODR|=1<<5; //PB5 ¾²Ö¹Ê¹ÄÜ£¨Êä³ö¸ß£©
- GPIOB->CRL&=0X0FFFFFFF;
- GPIOB->CRL|=0X30000000;//PB7 ÍÆÍìÊä³ö
- GPIOB->CRL&=0XF0FFFFFF;
- GPIOB->CRL|=0X03000000;//PB6 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XFFFFFFF0;
- //0ÇøÊý¾ÝÊäÈë¶Ë¿ÚÅäÖÃ
- GPIOC->CRL|=0X00000003;//PC0 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XFFFFFF0F;
- GPIOC->CRL|=0X00000030;//PC1 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XFFFFF0FF;
- GPIOC->CRL|=0X00000200;//PC2 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XFFFF0FFF;
- GPIOC->CRL|=0X00003000;//PC3 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XFFF0FFFF;
- GPIOC->CRL|=0X00030000;//PC4 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XFF0FFFFF;
- GPIOC->CRL|=0X00300000;//PC5 ÍÆÍìÊä³ö
- GPIOC->CRL&=0XF0FFFFFF;
- GPIOC->CRL|=0X03000000;//PC6 ÍÆÍìÊä³ö
- GPIOC->CRL&=0X0FFFFFFF;
- GPIOC->CRL|=0X30000000;//PC7 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XFFFFFFF0;
- //1ÇøÊý¾ÝÊäÈë¶Ë¿ÚÅäÖÃ
- GPIOB->CRH|=0X00000003;//PB8 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XFFFFFF0F;
- GPIOB->CRH|=0X00000030;//PB9 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XFFFFF0FF;
- GPIOB->CRH|=0X00000300;//PB10 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XFFFF0FFF;
- GPIOB->CRH|=0X00003000;//PB11 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XFFF0FFFF;
- GPIOB->CRH|=0X00030000;//PB12 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XFF0FFFFF;
- GPIOB->CRH|=0X00300000;//PB13 ÍÆÍìÊä³ö
- GPIOB->CRH&=0XF0FFFFFF;
- GPIOB->CRH|=0X03000000;//PB14 ÍÆÍìÊä³ö
- GPIOB->CRH&=0X0FFFFFFF;
- GPIOB->CRH|=0X30000000;//PB15 ÍÆÍìÊä³ö
- //²ã¿ØÖƶ˿ÚÅäÖÃ
- GPIOC->CRH&=0XFFFFFFF0;
- GPIOC->CRH|=0X00000003;//PC8 ÍÆÍìÊä³ö
- GPIOC->CRH&=0XFFFFFF0F;
- GPIOC->CRH|=0X00000030;//PC9 ÍÆÍìÊä³ö
- GPIOC->CRH&=0XFFFFF0FF;
- GPIOC->CRH|=0X00000300;//PC10 ÍÆÍìÊä³ö
- GPIOC->CRH&=0XFF0FfFFF;
- GPIOC->CRH|=0X00300000;//PC13 ÍÆÍìÊä³ö
- //ÅäÖÃBUZZER¶Ë¿Ú
- GPIOD->CRL&=0XFFFFF0FF;
- GPIOD->CRL|=0X00000300;
- GPIOD->ODR|=1<<2; //PD2Êä³ö¸ß
- }
第二段程序,是我精简的程序,不用将BUZZER配置端口的程序放主函数,也能全部正常运行。
- void LED_Init(void)
- {
- RCC->APB2ENR|=1<<3;//ʹÄÜPORTBʱÖÓ
- RCC->APB2ENR|=1<<4;//ʹÄÜPORTCʱÖÓ
- RCC->APB2ENR|=1<<5;//ʹÄÜPORTDʱÖÓ
- //ÅäÖÃPB5~PB15ÎªÍÆÍìÊä³ö
- GPIOB->CRH&=0X00000000;
- GPIOB->CRH|=0X33333333;
- GPIOB->CRL&=0X000FFFFF;
- GPIOB->CRL|=0X33300000;
- //ÅäÖÃPC0~PC11ÎªÍÆÍìÊä³ö
- GPIOC->CRH&=0XFFFF0000;
- GPIOC->CRH|=0X00003333;
- GPIOC->CRL&=0X00000000;
- GPIOC->CRL|=0X33333333;
- //ÅäÖÃPD2ÎªÍÆÍìÊä³ö
- GPIOD->CRL&=0XFFFFF0FF;
- GPIOD->CRL|=0X00000300;
- GPIOD->ODR|=1<<2;
- }
问题5:电平不一样导致程序不能正常运行。我的595、138、245的控制信号都是3.3这个电平的,结果这些芯片的VCC和GND都是给的5V电压。。后来我换成3.3V的,问题就解决了。看来没有仔细看数据手册呀。问题6:用STM32实现单字节的发送和接收程序
具体描述:现在我有一上位机可以发送64个字节的数据,在单片机上设定了一个全局变量:u8 USART_RX_BUF[64]; //接收缓冲,最大64个字节,希望通过上位机发送64个字节后,存储在USART_RX_BUF[64],但现在,只能实现单片机的发,收程序一直不行,请指教。附中断程序:
- #ifdef EN_USART1_RX
- u8 USART_RX_BUF[64];
- u8 USART_RX_STA=0;
- void USART1_IRQHandler(void)
- {
- u8 res;
- if(USART1->SR&(1<<5))
- {
- res=USART1->DR;
- USART_RX_BUF[USART_RX_STA]=res;
- USART_RX_STA++;
- if(USART_RX_STA>63)
- USART_RX_STA=0;
- }
- }
- #endif
|