久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2925|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于DDS在stm32單片機(jī)上顯示的有關(guān)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:325679 發(fā)表于 2018-5-9 10:23 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
該程序可以實(shí)現(xiàn)在stm32上實(shí)現(xiàn)屏幕顯示和鍵盤輸入控制

單片機(jī)源程序如下:
  1. #include "stm32f10x.h"
  2. #include "stdio.h"
  3. #include "string.h"
  4. #include "drivers.h"

  5. // dds base freq : 0.9765625HZ
  6. /*------------------Macro Defines----------------------------------*/
  7. #define SYSTEMTICK_PERIOD_MS  10
  8. #define LED_PERIOD  1000

  9. /*------------------------------------------------------------------*/
  10. struct DDS_PARA{
  11.         uint8_t wave_type;
  12.         uint32_t freq_step;
  13.         uint32_t freq;
  14.         uint8_t phase;
  15. };
  16. enum PARA_TYPE{ NONE = 0, FREQ = 1, PHASE = 2};
  17. /*------------------------------------------------------------------*/
  18. extern uint8_t usart2_rx_buf[255];
  19. extern uint8_t usart2_frame_end;
  20. __IO uint32_t _localTimeTick_ms = 0;

  21. uint8_t usart_frame_buf[UART_FRAME_LENGTH] = {0};
  22. uint16_t frame_seq = 0;
  23. struct DDS_PARA dds_para_data;
  24. enum PARA_TYPE setting_type = FREQ;
  25. /*------------------------------------------------------------------*/
  26. uint8_t process_data_from_fpga(uint8_t* data_buf, uint8_t data_len);
  27. void lcd_update(void);
  28. uint8_t porcess_keybard_value(UserAckKeyValueType key_value);
  29. void lcd_update_actual_freq(void);
  30. /*------------------------------------------------------------------*/
  31. void SysTick_Handler(void) {
  32.         _localTimeTick_ms += SYSTEMTICK_PERIOD_MS;
  33. }

  34. uint32_t local_ticktime() {
  35.         return _localTimeTick_ms;
  36. }

  37. bool timeout(uint32_t last_time, uint32_t ms) {
  38.         return (bool)((_localTimeTick_ms - last_time) > ms);
  39. }

  40. void flash_led(void)
  41. {
  42.         static uint32_t timer_tick;
  43.         static uint8_t led_status;
  44.        
  45.         if(timeout( timer_tick, LED_PERIOD))
  46.         {
  47.                 if(led_status == 0)
  48.                 {
  49.                         GPIO_ResetBits(RED_LED_GPIO, RED_LED_PIN);
  50.                         led_status = 1;
  51.                 }
  52.                 else
  53.                 {
  54.                         GPIO_SetBits(RED_LED_GPIO, RED_LED_PIN);
  55.                         led_status = 0;
  56.                 }
  57.                 timer_tick = local_ticktime();
  58.         }
  59. }
  60. void flush_dds_para(void)
  61. {
  62.         dds_para_data.freq = 0;
  63.         dds_para_data.phase = 0;
  64.         setting_type = FREQ;
  65. }
  66. void init_data(void)
  67. {
  68.         //frame header
  69.         usart_frame_buf[0] = PROTOCOL_UART_FRAME_START_SYMBOL_1;       
  70.         usart_frame_buf[1] = PROTOCOL_UART_FRAME_START_SYMBOL_2;
  71.         usart_frame_buf[2] = 0x90;
  72.         usart_frame_buf[3] = 0x07;
  73.         //CRC
  74.         usart_frame_buf[12] = 0;
  75.         usart_frame_buf[13] = 0;
  76.         //frame tail
  77.         usart_frame_buf[14] = PROTOCOL_UART_FRAME_END_SYMBOL_1;
  78.         usart_frame_buf[15] = PROTOCOL_UART_FRAME_END_SYMBOL_2;
  79.        
  80.         flush_dds_para();
  81.         LCD_ShowString(50,  20,  16, "DDS SIGNAL GENERTAOR" ,0);
  82.         LCD_ShowString(20,  60,  16, "Freq(HZ)(Goal):" ,0);       
  83.         LCD_ShowString(20,  90,  16, "Freq(HZ)(Fact):" ,0);       
  84.         LCD_ShowString(266,  90,  16, "." ,0);       
  85.         LCD_ShowString(20,  120,  16, "Phase(degree):" ,0);       
  86.         LCD_ShowString(20,  150, 16, "Input data:" ,0);
  87.         LCD_ShowString(20,  180, 16, "Setting Type(L-R):" ,0);
  88.         LCD_ShowString(200, 180, 16, "FREQ " ,0);
  89. }

  90. void init_drivers(void)
  91. {
  92.         rcc_configuration();
  93.         GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable, ENABLE );
  94.         led_init();
  95.         init_keyBoard();
  96.         uart2_init();
  97.         init_lcd();
  98. }
  99. int main(void)
  100. {
  101.         uint8_t fpga_ack = 0;
  102.         uint8_t resend_times = 0;
  103.         uint32_t usart_reack_timeout = 0;
  104.         UserAckKeyValueType keyVal;
  105.         float dds_step;
  106.        
  107.         init_drivers();
  108.         init_data();
  109.         while(1)
  110.         {               
  111.                 flash_led();
  112.                 if(usart2_frame_end == 1)
  113.                 {
  114.                         if(process_data_from_fpga(usart2_rx_buf, UART_FRAME_LENGTH) == 1)
  115.                         {
  116.                                 fpga_ack = 0;
  117.                                 lcd_update_actual_freq();
  118.                         }
  119.                         memset(usart2_rx_buf, 0, UART_FRAME_LENGTH);
  120.                         usart2_frame_end = 0;
  121.                 }

  122.                 if(fpga_ack == 1)
  123.                 {                               
  124.                         if(timeout(usart_reack_timeout, 2000))
  125.                         {
  126.                                 resend_times++;
  127.                                 usart2_send_string(usart_frame_buf, UART_FRAME_LENGTH);
  128.                                 usart_reack_timeout = local_ticktime();
  129.                         }               
  130.                         if(resend_times >= 2)
  131.                         {
  132.                                 fpga_ack = 0;
  133.                                 resend_times = 0;
  134.                         }                               
  135.                 }
  136.                 if((keyVal = keyValueToUserAck()) != NOKEY)
  137.                 {                       
  138.                         if(porcess_keybard_value(keyVal))
  139.                         {                               
  140.                                 dds_step = (dds_para_data.freq/0.9765625);
  141.                                 dds_para_data.freq_step = dds_step;
  142.                                 if((uint32_t)(dds_step/0.5)/2 == 1)
  143.                                 {
  144.                                                 dds_para_data.freq_step++;
  145.                                 }
  146.                                 lcd_update();
  147.                                 frame_seq++;
  148.                                 usart_frame_buf[4] = frame_seq >> 8;
  149.                                 usart_frame_buf[5] = (uint8_t)frame_seq ;
  150.                                 usart_frame_buf[6] = (uint8_t)(dds_para_data.freq_step >> 24);
  151.                                 usart_frame_buf[7] = (uint8_t)(dds_para_data.freq_step >> 16);
  152.                                 usart_frame_buf[8] = (uint8_t)(dds_para_data.freq_step >> 8 );
  153.                                 usart_frame_buf[9] = (uint8_t)dds_para_data.freq_step;
  154.                                 usart_frame_buf[10] = dds_para_data.phase;
  155.                                 usart2_send_string(usart_frame_buf, UART_FRAME_LENGTH);
  156.                                 fpga_ack = 1;
  157.                                 usart_reack_timeout = local_ticktime();
  158.                         }
  159.                 }
  160.         }
  161. }

  162. uint8_t process_data_from_fpga(uint8_t* data_buf, uint8_t data_len){
  163.         uint8_t temp_data_buf[20] = {0};
  164.         uint8_t i;
  165.        
  166.         if(data_len > 20)
  167.         {
  168.                 return 0;
  169.         }
  170.        
  171.         for(i = 0; i < data_len; i++)
  172.         {
  173.                 temp_data_buf[i] = data_buf[i];
  174.         }

  175.         switch(temp_data_buf[2])
  176.         {
  177.                 case 0x80: //from fpga
  178.                         {                               
  179.                                 if(temp_data_buf[3] == 0x03)
  180.                                 {
  181.                                         if(temp_data_buf[6] == 0xA5)
  182.                                                 return 1;
  183.                                 }                                                        
  184.                         }
  185.                         break;
  186.                 default: break;
  187.         }
  188.         return 0;
  189. }

  190. void lcd_update_actual_freq(void)
  191. {
  192.         float actual_freq;
  193.        
  194.         actual_freq = dds_para_data.freq_step * 0.9765625;
  195.         LCD_ShowNum(170, 90, actual_freq,  12, 16);       
  196.         LCD_ShowNum(270, 90, (uint32_t)(actual_freq*100)%100,  3, 16);
  197. }
  198. void lcd_update(void)
  199. {
  200.         uint32_t updated_freq ;
  201.         uint16_t updated_phase;
  202.        
  203.         updated_freq = dds_para_data.freq;
  204.         updated_phase = dds_para_data.phase;
  205.         LCD_ShowNum(200, 60, updated_freq,  12, 16);       
  206.        
  207.         LCD_ShowNum(200, 120, updated_phase, 12, 16);       
  208. }

  209. uint8_t porcess_keybard_value(UserAckKeyValueType key_value)
  210. {
  211.         static uint32_t temp_value;
  212.        
  213.         if(key_value < 10)
  214.         {
  215.                 temp_value = temp_value*10 + (uint8_t) key_value;
  216.                 LCD_ShowNum(200, 150, temp_value, 12, 16);       
  217.         }
  218.        
  219.         if(key_value == KEY_OK)
  220.         {
  221.                 if(setting_type == FREQ)
  222.                 {
  223.                                 dds_para_data.freq = temp_value;
  224.                 }
  225. ……………………

  226. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
DDS波形顯示.rar (224.84 KB, 下載次數(shù): 25)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:557871 發(fā)表于 2019-8-7 20:59 | 只看該作者
好像要
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 啪一啪 | 在线观看欧美一区 | 一区二区三区免费 | 夜夜艹天天干 | 动漫www.被爆羞羞av44 | 国产有码 | 天堂资源 | 99热在线播放 | www.日本三级| 国产亚洲一区在线 | 91九色视频 | 国产午夜精品久久久久免费视高清 | 日本精品视频一区二区三区四区 | 国产综合在线视频 | 欧美日日日日bbbbb视频 | 欧美精品91 | 欧美日韩亚洲国产综合 | 国产98色在线 | 日韩 | 国产精品国产成人国产三级 | 国产一区视频在线 | 亚洲区一区二 | 狠狠av| 色婷婷一区 | 国产精品一区二区在线观看 | 丝袜 亚洲 另类 欧美 综合 | 国产欧美一区二区三区国产幕精品 | 男女免费观看在线爽爽爽视频 | 亚洲人a| 九九在线视频 | 亚洲精品久久 | 精品久久久网站 | 亚洲日韩中文字幕一区 | 国产乱码精品一品二品 | 国产精品视频一二三区 | 91九色porny首页最多播放 | 国产精品亚洲片在线播放 | 欧美黑人体内she精在线观看 | 天天干,夜夜操 | 国产精品毛片久久久久久 | 日韩亚洲视频在线 | 精品欧美一区二区三区久久久 |