TA的每日心情 | 无聊 2016-10-8 20:34 |
---|
签到天数: 10 天 连续签到: 1 天 [LV.3]偶尔看看II
|
本帖最后由 杨肉师傅 于 2017-4-27 22:48 编辑
板子还没收到,但是五一的时候应该能到,先把资料熟悉下,建立工程模板;
1、看资料和固件库;
2、建立工程;
3、编译及解决问题;
4、总结和发帖;
1、看资料和固件库;
浏览了一遍论坛上下载的资料,没有数据手册,到网上下一个看一下,顺便发在附件里;
2、建立工程;
先打开官方工程模板看一下,不过不能选择Software Packs,自己编译的工程得自己建:
官方的工程结构:
参照官方的结构自己建立一个工程:
编写好串口和延时函数,main函数里随便写点: - /*!
- \brief usb_to_uart_init
- \param[in] none
- \param[out] none
- \retval none
- \attention USART2,tx:PD8,rx:PD9,baud:115200
- */
- void usb_to_uart_init(void)
- {
- /* enable the usart GPIO clock */
- rcu_periph_clock_enable( RCU_GPIOD);
- /* enable USART clock */
- rcu_periph_clock_enable(RCU_USART2);
- /* connect port to USARTx_Tx */
- gpio_af_set(RCU_GPIOD, GPIO_AF_7, GPIO_PIN_8);
- /* connect port to USARTx_Rx */
- gpio_af_set(RCU_GPIOD, GPIO_AF_7, GPIO_PIN_9);
- /* configure USART Tx as alternate function push-pull */
- gpio_mode_set(RCU_GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_8);
- gpio_output_options_set(RCU_GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);
- /* configure USART Rx as alternate function push-pull */
- gpio_mode_set(RCU_GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
- gpio_output_options_set(RCU_GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);
-
- /* USART configure */
- usart_deinit(USART2);
- usart_baudrate_set(USART2,115200U);
- usart_receive_config(USART2, USART_RECEIVE_ENABLE);
- usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);
- usart_enable(USART2);
-
- }
- /* retarget the C library printf function to the USART */
- int fputc(int ch, FILE *f)
- {
- usart_data_transmit(USART2, (uint8_t)ch);
- while(RESET == usart_flag_get(USART2, USART_FLAG_TBE));
- return ch;
- }
复制代码- static uint8_t fac_us=0; //us延时倍乘数
- static uint16_t fac_ms=0; //ms延时倍乘数
- /*!
- \brief delay_init
- \param[in] none
- \param[out] none
- \retval none
- \attention 配置systick,初始化延时函数
- */
- void delay_init(void)
- {
- systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);
- fac_us = SystemCoreClock/8000000UL; // 延时1us需要的systick时钟数
- fac_ms = (uint16_t)fac_us*1000; // 延时1ms需要的systick时钟数
- }
- /*!
- \brief delay_us
- \param[in] nus:需要延时的us数
- \param[out] none
- \retval none
- \attention us延时函数,注意nus的值不要大于118481us(最大值即2^24/fac_us即120 000 000 / 15)
- */
- void delay_us(uint32_t nus)
- {
- uint32_t temp;
- SysTick->LOAD=nus*fac_us; //时间加载
- SysTick->VAL=0x00; //清空计数器
- SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
- do
- {
- temp=SysTick->CTRL;
- }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
- SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
- SysTick->VAL =0X00; //清空计数器
- }
- /*!
- \brief delay_ms
- \param[in] nms:需要延时的ms数
- \param[out] none
- \retval none
- \attention ms延时函数,最大大约1118ms
- */
- void delay_ms(uint16_t nms)
- {
- uint32_t temp;
- SysTick->LOAD=(uint32_t)nms*fac_ms; //时间加载(SysTick->LOAD为24bit)
- SysTick->VAL =0x00; //清空计数器
- SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数
- do
- {
- temp=SysTick->CTRL;
- }while((temp&0x01)&&!(temp&(1<<16))); //等待时间到达
- SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
- SysTick->VAL =0X00; //清空计数器
- }
复制代码- /*!
- \brief main function
- \param[in] none
- \param[out] none
- \retval none
- */
- int main(void)
- {
- delay_init();
- usb_to_uart_init();
-
- while (1)
- {
- static uint8_t i;
- printf("--%3d--\r\n",i++);
- }
- }
复制代码3、编译及解决问题; 编译,缺少core_cmInstr.h的话:
到keil的安装目录找到ARM的CMSIS头文件,全部复制到工程里,管他有用没用都复制过来:
再编译就没用问题了:
4、总结和发帖; 编译通过了,还没测试,看了网友的一些帖子,坐等板子到来; |
|