TA的每日心情 | 开心 2016-7-19 10:35 |
---|
签到天数: 8 天 连续签到: 1 天 [LV.3]偶尔看看II
|
也许是用ST的HAL库用久了,再来用这种STD类的库,就觉得有点吃力,不过有一点,底层细节尽在掌握,也是一种不错的感觉!
查询207的原理图以及数据手册,USART1直接连接到CH340T上面,GPIO分别为PB6和PB7。
了解了这些细节之后,就可以来写个小程序测试UART通信。这里只测试了发送的功能。
在上一个程序的基础上添加UART1的初始化代码- static void USART1_Config(void)
- {
- GPIO_InitPara GPIO_InitStructure;
- USART_InitPara USART_InitStructure;
- RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOB, ENABLE );
- RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_USART1, ENABLE );
- RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6 ;
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
- GPIO_Init( GPIOB , &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;;
- GPIO_Init( GPIOB , &GPIO_InitStructure);
- GPIO_PinRemapConfig(GPIO_REMAP_USART1, ENABLE);
- USART_InitStructure.USART_BRR = 115200;
- USART_InitStructure.USART_WL = USART_WL_8B;
- USART_InitStructure.USART_STBits = USART_STBITS_1;
- USART_InitStructure.USART_Parity = USART_PARITY_RESET;
- USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
- USART_InitStructure.USART_RxorTx = USART_RXORTX_RX | USART_RXORTX_TX;
- USART_Init(USART1, &USART_InitStructure);
- /* USART enable */
- USART_Enable(USART1, ENABLE);
- }
- static void HAL_USART1_SendBytes(const char *msg)
- {
- while(*msg)
- {
- USART_DataSend(USART1, *(msg++));
- while(USART_GetBitState(USART1, USART_FLAG_TBE) == RESET);
- }
- }
复制代码 依照HAL库的模式写了个发送字串的函数HAL_USART1_SendBytes(const char *msg),主函数里分别对UART1进行初始化及发送数据。
碰到的几个问题:
1. 下载后不会自动运行,尽管在工程里设置为下载后运行,但是还是没有效果,非得按下RESET。
2. USART中的TBE标志位,一直将数据缓冲区理解为DR,绕了好久才搞清楚,晕死
3. BSP中的发送和接收函数,都没有考虑超时因素
库函数已经比较完整了,一些细节问题还要补充,比如上面提到的UART发送和接收的问题。
总的来说,已经有点感觉了,很不错,向GD的工程师们致敬!
|
|