微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助!STM32大神哪家强?中国电子发烧友论坛

求助!STM32大神哪家强?中国电子发烧友论坛

时间:10-02 整理:3721RD 点击:

  1. #include "stm32f10x.h"   
  2. #include <stdio.h>
  3. void usart_init(void)
  4. {
  5.   RCC->APB2ENR |=(1<<14);                  //开串口时钟
  6.   RCC->APB2ENR |=(1<<2);                   //开GPIOA时钟。  
  7.   GPIOA->CRH &=~(0Xf<<4*1);
  8.   GPIOA->CRH |=0xB<<4*1;       //PA9 复用推挽输出,最大速度50M
  9.   GPIOA->CRH &=~(0Xf<<4*2);
  10.   GPIOA->CRH |=(4<<4*2);      //PA10  浮空输入
  11.                              //串口使能 | 8数据位 | 发送  |接收使能
  12.   USART1->CR1 |=  (1<<13)  |  (1<<12) | (1<<3) | (1<<2);
  13.   USART1->CR1 &=~(1<<10);
  14.   USART1->CR2 &=(~(1<<12))|(1<<13); // 1个停止位
  15.   USART1->BRR |=0x1d4c;   //将波特率设置为9600.72M时钟下
  16. }

  17. int fputc(int ch, FILE *f)
  18. {
  19.         
  20.         USART_SendData(USART1, (unsigned char) ch);
  21.         while (!(USART1->SR & USART_FLAG_TXE));
  22.                
  23.         return (ch);
  24. }

  25. void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
  26. {

  27.   assert_param(IS_USART_ALL_PERIPH(USARTx));
  28.   assert_param(IS_USART_DATA(Data));
  29.       USARTx->DR = (Data & (uint16_t)0x01FF);
  30. }


  31. int main(void)
  32. {  
  33.     usart_init();   //串口初始
  34.    while(1)
  35. {
  36. printf("123456abc");
  37. }
  38. }

复制代码


显示乱码,打印出来的是点点点.,乱码。不知为何,求解。
问题(1):上程序该如何矫正。
问题(2):如果不用重定向,能不能把字符变为8位二进制数再送入USART1 ->DR 寄存器的 bit [8:0]位中?该如何操作?以下函数可以吗?

  1. void send_data(char * ch,int n)  // 'A'=65 n为字符个数
  2. {
  3.   u32 i;
  4.   int str;
  5.   for(i=0;i<n;i++)
  6.     {
  7.       str=(ch【i】<i>)<i><i><i>/16<<4+ch【i】<i><i><i><i>%16;   //   65/16=4      4<< 4 + 65%16=0X40 + 1 = 0x41 =A字符的
  8.       USART1->DR =str;                                                                                     //二进制码
  9.     }
  10. }</i></i></i></i></i></i></i></i>

复制代码



其实我也知道上面程序不能实现,ch【i】只能表示字符,不能表示字符代替的ASCII码,但是我不知道该怎么修改。
我意思是能不能像51串口那样,直接把要发送的字符送到缓冲寄存器SBUF中,然后它自己会自动发送?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top